poj1422(最小路径覆盖问题)

news/2024/7/5 2:24:50

最小路径覆盖数:
对于一个DAG(有向无环图),选取最少条路径,使得每个 顶点属于且仅属于一条路径。路径长度可以为零;(有向图中找一些路径,使之覆盖了图中的所有顶点,就是任意一个顶点都跟那些路径中的某一条关联,且任何一个顶点有且只有一个与之关联)

最小路径覆盖数(最少边覆盖)=顶点数-最大匹配数;

思路:把每个点都拆成两个点,分为入点和出点,如果 u 到 v 有边,那么我们就让 u 的入点连向 v 的出点 , 匈牙利 算出最大匹配。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
const int maxx=1005;
const int inf=0x3f3f3f3f;
int used[maxx];
int line[maxx][maxx];
int vis[maxx];
int n,m;
int nxt[maxx];
void init(){memset(used,0,sizeof(used));memset(vis,0,sizeof(vis));memset(line,0,sizeof(line));memset(nxt,-1,sizeof(nxt));
}
int Find(int x){for(int i=1;i<=n;i++){if(used[i]==0&&line[x][i]==1){used[i]=1;if(nxt[i]==-1||Find(nxt[i])){nxt[i]=x;return true;}}}return false;
}
int match(){int sum=0;for(int i=1;i<=n;i++){memset(used,0,sizeof(used));if(Find(i)){sum++;}}return sum;
}
int main(){int t;scanf("%d",&t);while(t--){scanf("%d %d",&n,&m);init();for(int i=1;i<=m;i++){int a,b;scanf("%d %d",&a,&b);line[a][b]=1;}int ans=match();cout<<n-ans<<endl;} return 0;
}

http://lihuaxi.xjx100.cn/news/286083.html

相关文章

主席树 ---- CF 1422F. Boring Queries(由离线推出在线如何求的 ,求解多次询问的区间LCM)

题目链接 题目大意&#xff1a; 给你nnn个数&#xff0c; 每次往第iii个数里面里面乘aaa&#xff0c;问你这nnn个数的LCM\text{LCM}LCM是多少&#xff1f; 解题思路&#xff1a; 多个数的lcm不是所有数的乘积除以所有数的gcd&#xff0c;如 4 8 3 正确求法是每个数分解质因数…

春节停车难?用Python找空车位

作者 | Adam Geitgey译者 | 风车云马整理 | Jane出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导语】今天这篇文章的选题非常贴近生活。营长生活在北京&#xff0c;深知开车出门最怕的就是堵车和找不到停车位。记得冬至那个周末&#xff0c;几个小伙伴滑雪回来找…

汉字风格迁移篇--中文字体的多任务对抗学习

文章目录 摘要存在的问题提出一种方法INTRODUCTION汉字生成背景RELATED WORK现有的一些方法基于CG的方法存在的问题METHOD DESCRIPTIONA、Problem F ormulationB、Base ModelC、MTfontGAN Network AchitecturesD、Objective FunctionE. Training ProcessEXPERIMENTSA、Experime…

poj2594(最小可相交覆盖路径问题)

最小可相交覆盖&#xff1a; 先用floyd求出原图的传递闭包&#xff0c;即如果a->b有路径&#xff0c;b->c有路径&#xff0c;&#xff0c;则加边a->c。然后就转化成了最小路径覆盖问题&#xff08;最小不相交路径覆盖问题&#xff09;。 最小路径覆盖数: 对于一个DAG&…

子段乘积(逆元费马小定理)+线段树做法

题解&#xff1a;一开始做这个题的时候想过尺取法&#xff0c;但是因为没有逆元的知识&#xff0c;不知道该如何不断删除左端元素。其实这题并不难想&#xff0c;设l&#xff0c;r为两端开始都置为1&#xff0c;当长度小于k的时候不断乘右端元素并取余&#xff0c;当长度等于k时…

javascript --- 事件托付

javascript 之 事件托付 长处&#xff1a;1、提高性能&#xff08;仅仅须要对父级进行操作&#xff0c;子节点相同会拥有其相关属性和方法&#xff09; 2、对于新加入的事件。也让其拥有父级事件的属性 <!doctype html> <html lang"en"> <head><…

很多程序员编程时都戴耳机?他们在听什么

&#xff08;给视学算法加星标&#xff09;转自&#xff1a;网络听说很多程序员工作时都戴耳机&#xff1f;他们在听什么呢&#xff1f;观点一&#xff1a;非诚勿扰&#xff0c;想静静1、啥也没听&#xff0c;只是带着耳机而已。只是想告诉别人不要打扰我&#xff0c;选择性屏蔽…

线段树 ---- CF452F. Permutation(线段树维护序列Hash)

题目链接 题目大意&#xff1a; 就是给你一个全排列&#xff0c;问你是否存在一个cab2c\frac{ab}{2}c2ab​ 满足ccc的位置在a,ba,ba,b之间 解题思路&#xff1a; 首先我们先按顺序遍历&#xff0c;我们假设遍历到的数是中间那个数就是ccc,那么它要存在的答案的话就是存在一个…