NC20566 游戏(二分图)
感觉复杂度很有问题的
但是这个算法比较好像,就是先连二分图,从最小权值一直做匹配
数据可能并不是特别强,可能也是确实网络流的算法都是能跑较大数据
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<bits/stdc++.h> typedef long long ll; using namespace std; typedef pair<int,int> pll; const int N=2e6+10; const int inf=0x3f3f3f3f; int match[N],st[N]; int h[N],ne[N],e[N],idx; int now; void add(int a,int b){ e[idx]=b,ne[idx]=h[a],h[a]=idx++; } bool dfs(int u){ int i; for(i=h[u];i!=-1;i=ne[i]){ int j=e[i]; if(st[j]==now) continue; st[j]=now; if(!match[j]||dfs(match[j])){ match[j]=u; return true; } } return false; } int main(){ ios::sync_with_stdio(false); int n; memset(h,-1,sizeof h); cin>>n; int i; for(i=1;i<=n;i++){ int a,b; cin>>a>>b; add(a,i); add(b,i); } int ans=0; for(i=1;i<=10000;i++){ now=i; if(dfs(i)){ ans++; } else break; } cout<<ans<<endl; return 0; }
没有人不辛苦,只有人不喊疼