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

news/2024/7/5 2:08:09

最小可相交覆盖:
先用floyd求出原图的传递闭包,即如果a->b有路径,b->c有路径,,则加边a->c。然后就转化成了最小路径覆盖问题(最小不相交路径覆盖问题)。
最小路径覆盖数:
对于一个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 e[maxx][maxx];
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));for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j){e[i][j]=0;}else{e[i][j]=inf;}}	}
}
void floyd(int n){for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(e[i][k]==1&&e[k][j]==1){line[i][j]=1;}}}}
}
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;while(scanf("%d %d",&n,&m)){if(n==0&&m==0)break;init();for(int i=1;i<=m;i++){int a,b;scanf("%d %d",&a,&b);e[a][b]=1;line[a][b]=1;}floyd(n);int ans=match();cout<<n-ans<<endl;} return 0;
}

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

相关文章

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

题解&#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,那么它要存在的答案的话就是存在一个…

到底是什么特征影响着CNN的性能?

作者 | 刘畅 编辑 | Jane出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;开门见山。最近阅读了一篇论文&#xff0c;加上看了一些之前的工作。记录一下&#xff0c;CNN 到底学到了什么东西&#xff0c;或者换句话讲。到底是什么样的特征在影响着CNN 的性能&#xff1…

hdu 2896:病毒侵袭

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)            Total Submission(s): 18206 Accepted Submission(s): 4541 Problem Description当太阳的光辉逐渐被月亮遮蔽&#xff0c;世界失去了光明&#xff0c;大地迎来…

poj1548(最小路径覆盖问题)

题意&#xff1a;相当于给出N个坐标点&#xff0c;因为机器人只能向下或者向右走&#xff0c;所以如果能到达其他点&#xff0c;则连接这两个点&#xff0c;即line[i][j]1 最小路径覆盖数: 对于一个DAG&#xff08;有向无环图&#xff09;&#xff0c;选取最少条路径&#xff0…

Prime Path(bfs)广度优先搜索

题目描述 The ministers of the cabinet were quite upset by the message from the Chief of Security stating that they would all have to change the four-digit room numbers on their offices. — It is a matter of security to change such things every now and the…