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,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
算法
图的应用(最小生成树,最短路径,有向无环图)
图的应用(最小生成树,最短路径,有向无环图
24 0
|
4月前
|
人工智能 算法 测试技术
【图论】【拓扑排序】1857. 有向图中最大颜色值
【图论】【拓扑排序】1857. 有向图中最大颜色值
|
4月前
|
NoSQL 容器 消息中间件
图、图的遍历及图的拓扑排序
图、图的遍历及图的拓扑排序
|
算法 Java
利用Dijkstra算法求顶点v1到其他各顶点的最短路径Java实现
利用Dijkstra算法求顶点v1到其他各顶点的最短路径Java实现
109 0
利用Dijkstra算法求顶点v1到其他各顶点的最短路径Java实现
|
存储
【每日一题Day61】寻找图中是否存在路径 | BFS 并查集
初始时将source设为已访问,并且将其加入队列。之后每次将队列中的节点出队,并将其能够到达的未访问过的节点入队。如果访问到destination,则直接返回true;如果队列为空,仍未访问到destination,则返回false
107 0
|
机器学习/深度学习 存储
图的遍历 无向图深搜 宽搜
图的遍历 无向图深搜 宽搜
图的遍历 无向图深搜 宽搜
|
算法
图的最短路径—— dijkstra算法
算法的思想如下:规定一个 出发点,然后先初始化距离数组。数组中的每个下标就对应一个结点,每个数据项就是出发点到每个结点的距离。1:将一个集合分为两部分,一个是已经找过的结点U,一个是没有找到过的v2:在距离的数组中,没有访问过的结点中找一个权重最小的边,然后将这个结点添加到u中,并且以这个结点作为中间结点,来更新数组,判断条件是i到temp+temp到j 的距离是不是小于i到j的距离,若是,则就要更新。
1341 0
|
算法
图的最小生成树——Prim算法
Prim算法思想如下:首先将图的点分为两部分,一种是访问过的u,一种是没有访问过的v1:首先在访问过的顶点中找一条到u到v的一条权值最小的边2:然后将这条边中的v中的顶点添加到u中,直到边的个数=顶点数-1如下图所示,下面是prim算法的图示(原图)(a -1)(a -2)(a -3)(a -4) (a -5) (a -6) 算法的流程图如下: 代码如下:// // main.
7992 0
|
算法
图的最小生成树——Kruskal算法
Kruskal算法的思想如下 假设有n个顶点的连通图。首先先构造有顶点构成的集合0,每个顶点都是一个集合,不含有任何边。 在边找一个最小权值的边 判断这个边的俩个顶点是否来自于两个不同的集合,若是就将它俩归并为一个集合,然后将这个边添加到要构成的图的集合中。
5212 0