题目大意:给定一个无向图,求能否找到一个点和边的匹配,使匹配数为点数。
我又一次被并查集虐傻了。。。。
http://blog.csdn.net/popoqqq/article/details/41544997
很好奇自信Dinic的话O(40W*√10W)的复杂度会不会T
估计会。。。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define M 100100 using namespace std; int n,m; namespace Union_Find_Set{ int fa[M];bool flag[M]; int Find(int x) { if(!fa[x]||fa[x]==x) return fa[x]=x; return fa[x]=Find(fa[x]); } void Union(int x,int y) { x=Find(x);y=Find(y); if(x==y) { flag[x]=true; return ; } fa[x]=y;flag[y]|=flag[x]; } } int main() { using namespace Union_Find_Set; int i,x,y; cin>>n>>m; for(i=1;i<=m;i++) { scanf("%d%d",&x,&y); Union(x,y); } for(i=1;i<=n;i++) if(!flag[Find(i)]) { puts("NIE"); return 0; } puts("TAK"); return 0; }
原文:http://blog.csdn.net/popoqqq/article/details/44597567