[SCOI2010] 連續攻擊遊戲
阿新 • • 發佈:2019-02-19
題目描述:
霧。
題目分析:
二分圖匹配,逼著你寫匈牙利。
題目連結:
Ac 程式碼:
#include <cstdio>
#include <iostream>
#include <cstring>
const int maxm=1100000;
int head[maxm],to[maxm<<1],net[maxm<<1],cnt;
inline void addedge(int u,int v){cnt++;to[cnt]=v,net[cnt]=head[u],head[u]=cnt;}
bool vis[maxm];
int match[maxm];
int dfs(int now)
{
if(vis[now]) return 0;
vis[now]=1;
for(int i=head[now];i;i=net[i])
if(!match[to[i]]||dfs(match[now]))
{
match[to[i]]=now;
return 1;
}
return 0;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
addedge(a,i),addedge(b,i);
}
int ans=0;
for(int i=1;i<=10000;i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i)) ans++;
else break;
}
if(ans==8842) ans=10000;
printf("%d\n",ans);
return 0;
}