hdu2444 判断二分图+最大匹配
2013-07-20 09:55
218 查看
用黑白染色判断二分图。
#include <cstdio> #include <cstring> #include <queue> using namespace std; struct node { int u,v; }; node edge[50000]; int first[300],next[50000]; int cc; int vis[300]; int flag[300]; int linker[300]; inline void add_edge(int u,int v) { edge[cc].u=u; edge[cc].v=v; next[cc]=first[u]; first[u]=cc; cc++; } int judge(int n) { queue<int> q; int i; for(i=1;i<=n;i++) //有报告没有这句,我觉得是错的,因为如果图不连通的话 ,会有错误答案 { if(vis[i]==-1) { q.push(i); vis[i]=1; while(!q.empty()) { int u=q.front(); q.pop(); int j; for(j=first[u];j!=-1;j=next[j]) { int v=edge[j].v; if(vis[v]==-1) { vis[v]=!vis[u]; q.push(v); } else if(vis[v]==vis[u]) return 0; } } } } return 1; } bool dfs(int u) { int i; for(i=first[u];i!=-1;i=next[i]) { int v=edge[i].v; if(!flag[v]) { flag[v]=1; if(linker[v]==-1||dfs(linker[v])) { linker[v]=u; return true; } } } return false; } int match(int n) { int i; int sum=0; memset(linker,-1,sizeof(linker)); for(i=1;i<=n;i++) { if(vis[i]==1) { memset(flag,0,sizeof(flag)); if(dfs(i)) sum++; } } return sum; } int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int i; memset(vis,-1,sizeof(vis)); memset(first,-1,sizeof(first)); memset(next,-1,sizeof(next)); cc=0; for(i=0;i<m;i++) { int u,v; scanf("%d%d",&u,&v); add_edge(u,v); add_edge(v,u); } int ans=judge(n); if(ans==0) printf("No\n"); else { int res=match(n); printf("%d\n",res); } } return 0; }
相关文章推荐
- HDU2444 二分图判断+最大匹配
- hdu2444 The Accomodation of Students--二分图判断 & 最大匹配数
- HDU2444 The Accomodation of Students(染色法判断二分图+最大匹配)
- hdu2444(二分图判断+二分图最大匹配)
- hdu2444 The Accomodation of Students (二分图判断+最大匹配)
- hdu2444 The Accomodation of Students【二分图判断+最大匹配】
- hdu2444二分图判断+最大匹配
- hdu2444二分图最大匹配+判断二分图
- HDU2444(判断是否为二分图,求最大匹配)
- HDU2444 二分图判断(BFS 的染色法) + 求最大匹配边数(DFS 的匈牙利算法)
- hdu2444 判断二分图+最大匹配
- hdu 2444(二分图的判断以及求最大匹配)
- HDU 2444 The Accomodation of Students(二分图判断+最大二分匹配)
- hdu2444The Accomodation of Students【判断二分图+最大匹配】
- HDU2444(KB10-B 二分图判定+最大匹配)
- hdu 2444 The Accomodation of Students (判断二分图+最大匹配)
- HDU 2444 The Accomodation of Students 判断二分图 + 最大匹配
- HDU 2444 The Accomodation of Students【二分图判断+最大匹配】
- The Accomodation of Students---hdu2444(二分图,最大匹配)
- HDU2444The Accomodation of Students(二分图判断+最大匹配)