杭电ACM1151
来源:互联网 发布:网络电视看电视 编辑:程序博客网 时间:2024/06/06 02:12
今天的第二道匈牙利算法题目。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1151
题目大意:在一个镇子里由街道连接了许多交叉路口,并且这些街道都是单行道,现在要派出士兵巡查所有交叉路口,要求求出最少的士兵数,可以遍历所有交叉路口。
解题思路:在有向无环图中,最小点覆盖=顶点数-最大覆盖。
注意点:因为题目限制所有顶点都大于0,因此遍历时,循环下标应从1开始,读题不细,在这个上面卡了几次……
//AC代码:#include <iostream>#include <string.h>using namespace std;#define MAX 125bool used[MAX];int linked[MAX];int g[MAX][MAX];int n;bool dfs(int u){ int v; for(v=1;v<=n;v++) { if(g[u][v]&&!used[v]) { used[v] = true; if(linked[v]==-1||dfs(linked[v])) { linked[v] = u; return true; } } } return false;}int hungry(){ int u; int res=0; memset(linked,-1,sizeof(linked)); for(u=1;u<=n;u++) { memset(used,0,sizeof(used)); if(dfs(u))res++; } return res;}int main(){ int t; int count; int u,v; while(cin>>t) { for(int i=0;i<t;i++) { memset(g,0,sizeof(g)); cin>>n>>count; for(int j=0;j<count;j++) { cin>>u>>v; g[u][v] = 1; } cout<<n-hungry()<<endl; } } return 0; }
0 0
- 杭电ACM1151
- 杭电
- 杭电
- 杭电
- 杭电 1234 和 杭电 2115
- 杭电2056之Rectangles 杭电
- 杭电ACM1061Rightmost Digit
- 杭电2099 7.11
- 杭电ACM 1003
- 杭电 ACM 2016
- 杭电ACM1466
- 杭电ACM1003
- 杭电ACM1225
- 杭电ACM2023
- 杭电ACM2602
- 杭电ACM2955
- 杭电ACM3198
- 杭电ACM2028 求教
- “互联网+”创新创业计划书(二)
- js中的|| 与 &&
- Java中String与Int怎样相互转换
- Objective-C语法之异常处理
- Test-01
- 杭电ACM1151
- Openwrt从零开始(一)
- HIHO#1245 : 王胖浩与三角形
- leetcode155 Min Stack
- 太阳系模型_飞机游戏JAVA084-097
- 充电多面手:不一样的光伏充电宝
- ios-(Xib的使用) 工作随笔
- spring文件
- 白云机场查获具有充电宝功能的时尚女包