HDU6105-二分匹配
来源:互联网 发布:center os安装windows 编辑:程序博客网 时间:2024/05/21 13:59
题解:只有当bob把图切成所有端点有且只有一条边的时候bob才有可能赢所以当bob所有的点都有匹配并且点为偶数,同时要满足k>=n-1-n/2才能赢
所以直接二分匹配再判断一下就可以了
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<set>#include<vector>using namespace std;const int mx = 1005;int y[mx];int vis[mx];vector<int>g[mx];int n,k;bool find(int u){ for(auto v: g[u]){ if(!vis[v]){ vis[v] = 1; if(!y[v]||find(y[v])){ y[v] = u; return true; } } } return false;}bool MaxMatch(){ if(n&1) return false; //cout<<1<<endl; memset(y,0,sizeof(y)); for(int u = 1; u <= n; u++){ memset(vis,0,sizeof(vis)); if(!find(u)) return false; } //cout<<n<<endl; // cout<<n-1<<endl; //cout<<n-1-n/2<<endl; return k>=n-1-n/2;}int main(){ int t; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&k); for(int i = 1; i <= n; i++) g[i].clear(); for(int i = 2; i <= n; i++){ int v; scanf("%d",&v); g[i].push_back(v); g[v].push_back(i); } MaxMatch()?puts("Bob"):puts("Alice"); } return 0;}
阅读全文
0 0
- HDU6105-二分匹配
- hdu6105
- hdu6105
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- 二分匹配
- POJ 2657 Comfort(模拟+dfs)
- 各进制转换成二进制
- 怎样加入第三方客服功能?(百度商桥、美洽、53KF等)
- 快速排序
- 手工安装cordova插件到Android工程中
- HDU6105-二分匹配
- USACO17JAN Balanced Photo 平衡的照片
- C++中控制浮点数输出
- 线段树
- SSD的理解及应用
- ajax 异步验证
- Impala高性能探秘之Runtime Filter
- TCP通信过程大讨论
- 简单的浅拷贝和深拷贝