BZOJ [Scoi2010]遊戲
阿新 • • 發佈:2018-02-21
== ont div highlight ons 遊戲 scanf 攻擊 cpp
題解:
解法一:建立圖論模型,發現只要聯通塊中有環則這個聯通塊中的值都可以被攻擊到
如果是樹,則只能攻擊size-1個
解法二:二分圖匹配,二分答案,看看是否能攻擊到mid
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int u=10000; int n; int father[u+1]; int isinc[u+1]; int siz[u+1]; int Getf(int x){ if(father[x]==x)return x; return father[x]=Getf(father[x]); } void Unionn(int x,int y){ int fx=Getf(x); int fy=Getf(y); if(fx!=fy){ father[fx]=fy; siz[fy]+=siz[fx]; isinc[fy]=isinc[fy]|isinc[fx]; } } int main(){ for(int i=1;i<=u;++i)father[i]=i; for(int i=1;i<=u;++i)siz[i]=1; scanf("%d",&n); while(n--){ int x,y; scanf("%d%d",&x,&y); if(Getf(x)==Getf(y)){ isinc[Getf(x)]=1; }else{ Unionn(x,y); } } for(int i=1;i<=u;++i){ int f=Getf(i); if(isinc[f])continue; if(siz[f]==1){ printf("%d\n",i-1); return 0; } --siz[f]; } printf("%d\n",u); return 0; }
BZOJ [Scoi2010]遊戲