poj 2594Treasure Exploration(有向图路径可相交的最小路径覆盖)

简介:

1
#include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #include<cstdio> 5 #define N 505 6 using namespace std; 7 8 int g[N][N]; 9 int n, m; 10 int vis[N], linker[N]; 11 bool dfs(int u){ 12 for(int i=1; i<=n; ++i) 13 if(g[u][i] && !vis[i]){ 14 vis[i]=1; 15 if(!linker[i] || dfs(linker[i])){ 16 linker[i]=u; 17 return true; 18 } 19 } 20 return false; 21 } 22 23 int main(){ 24 while(scanf("%d%d", &n, &m) && (n||m)){ 25 memset(g, 0, sizeof(g)); 26 while(m--){ 27 int u, v; 28 scanf("%d%d", &u, &v); 29 g[u][v]=1; 30 } 31 for(int k=1; k<=n; ++k) 32 for(int i=1; i<=n; ++i) 33 for(int j=1; j<=n; ++j) 34 if(!g[i][j]) 35 g[i][j]=g[i][k]&&g[k][j]; 36 memset(linker, 0, sizeof(linker)); 37 int ans=0; 38 for(int i=1; i<=n; ++i){ 39 memset(vis, 0, sizeof(vis)); 40 if(dfs(i)) ++ans; 41 } 42 printf("%d\n", n-ans); 43 } 44 return 0; 45 }
复制代码









本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3919231.html,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
NoSQL 容器 消息中间件
图、图的遍历及图的拓扑排序
图、图的遍历及图的拓扑排序
|
存储 索引
树与图中的dfs和bfs—— AcWing 846. 树的重心 AcWing 847. 图中点的层次
树与图中的dfs和bfs—— AcWing 846. 树的重心 AcWing 847. 图中点的层次
75 0
|
算法 Java
利用Dijkstra算法求顶点v1到其他各顶点的最短路径Java实现
利用Dijkstra算法求顶点v1到其他各顶点的最短路径Java实现
113 0
利用Dijkstra算法求顶点v1到其他各顶点的最短路径Java实现
|
机器学习/深度学习
有向图,无向图的邻接矩阵和邻接表模板
有向图,无向图的邻接矩阵和邻接表模板
192 0
有向图,无向图的邻接矩阵和邻接表模板
|
存储
【每日一题Day61】寻找图中是否存在路径 | BFS 并查集
初始时将source设为已访问,并且将其加入队列。之后每次将队列中的节点出队,并将其能够到达的未访问过的节点入队。如果访问到destination,则直接返回true;如果队列为空,仍未访问到destination,则返回false
115 0
|
机器学习/深度学习 存储
图的遍历 无向图深搜 宽搜
图的遍历 无向图深搜 宽搜
图的遍历 无向图深搜 宽搜
|
存储 算法
图的广度优先搜索和深度优先搜索(邻接链表表示)
邻接表表示法将图以邻接表(adjacency lists)的形式存储在计算机中。所谓图的邻接表,也就是图的所有节点的邻接表的集合;而对每个节点,它的邻接表就是它的所有出弧。邻接表表示法就是对图的每个节点,用一个单向链表列出从该节点出发的所有弧,链表中每个单元对应于一条出弧。为了记录弧上的权,链表中每个单元除列出弧的另一个端点外,还可以包含弧上的权等作为数据域。图的整个邻接表可以用一个指针数组表示。例如下图所示,邻接表表示为
222 0
图的广度优先搜索和深度优先搜索(邻接链表表示)