POJ2594(二分匹配+Floyd求传递闭包)
来源:互联网 发布:手机怎么注册淘宝店铺 编辑:程序博客网 时间:2024/04/30 03:08
POJ2594(二分匹配+Floyd求传递闭包)
分类: 图论2013-03-09 20:39 64人阅读 评论(0) 收藏 举报
题目:Treasure Exploration
很明显是最小路径覆盖,只是必须先要求传递闭包就行了。
- #include <stdio.h>
- #include <string.h>
- #define N 510
- int uN,vN;
- int g[N][N];
- int linker[N];
- bool used[N];
- bool DFS(int u)
- {
- int v;
- for(v=0;v<vN;v++)
- {
- if(g[u][v]&&!used[v])
- {
- used[v]=true;
- if(linker[v]==-1||DFS(linker[v]))
- {
- linker[v]=u;
- return true;
- }
- }
- }
- return false;
- }
- int Hungary()
- {
- int u;
- int ret=0;
- memset(linker,-1,sizeof(linker));
- for(u=0;u<uN;u++)
- {
- memset(used,false,sizeof(used));
- if(DFS(u)) ret++;
- }
- return ret;
- }
- void Floyd(int n)
- {
- int i,j,k;
- for(i=0;i<n;i++)
- {
- for(j=0;j<n;j++)
- {
- if(g[i][j]==0)
- {
- for(k=0;k<n;k++)
- {
- if(g[i][k]==1&&g[k][j]==1)
- {
- g[i][j]=1;
- break;
- }
- }
- }
- }
- }
- }
- int main()
- {
- int n,m;
- int u,v;
- while(~scanf("%d%d",&n,&m))
- {
- if(n==0&&m==0) break;
- uN=vN=n;
- memset(g,0,sizeof(g));
- while(m--)
- {
- scanf("%d%d",&u,&v);
- u--;v--;
- g[u][v]=1;
- }
- Floyd(n);
- int ans=Hungary();
- printf("%d\n",n-ans);
- }
- return 0;
- }
- POJ2594(二分匹配+Floyd求传递闭包)
- POJ2594(二分匹配+Floyd求传递闭包)
- hdoj 1526 A Plug for UNIX 【floyd求传递闭包 + 二分图匹配】
- poj 2594 Treasure Exploration(二分图匹配+Floyd求传递闭包)
- poj 2594 Treasure Exploration(可重点最小路径覆盖)(二分匹配+Floyd求传递闭包)
- Floyd求传递闭包
- floyd求传递闭包
- floyd求传递闭包
- floyd 求传递闭包
- POJ2594 Treasure Exploration(二分图最小路径覆盖,传递闭包)
- poj 3660(Floyd求传递闭包)
- POJ 3660 Floyd求传递闭包
- bitset优化Floyd求传递闭包
- BZOJ1143(CTSC2008)[祭祀river]--传递闭包+二分图最大匹配(求最长反链)
- 喵哈哈村的魔法大师 【SCC+缩点+floyd求传递闭包+最大匹配+01 背包】
- floyd(传递闭包)
- hdu 1181 floyd求有向图传递闭包
- Floyd算法求图的传递闭包
- 二分匹配的Hopcroft-Carp算法
- UltraEdit无法打开
- HDU 3374String Problem(最大最小表示法+KMP)
- 原来java的正则也支持后置引用的,以前一直没有注意到。
- Java通过JNI调用C语言的方法
- POJ2594(二分匹配+Floyd求传递闭包)
- 触发器、索引、存储过程以及函数
- C++数据结构--归并排序
- win7下创建逻辑分区
- Eclipse快捷鍵
- 组合数取模深度解析
- 关于self.用法的一些总结
- 求最大公约数的Stein算法以及高精度实现
- Android中SQLite数据库操作(2)——SQLiteOpenHelper类