bzoj1143: [CTSC2008]祭祀river && bzoj27182718: [Violet 4]毕业旅行
其实我至今不懂为啥强联通缩点判入度会错。。。
然后这个求的和之前那道组合数学一样,就是最长反链=最小链覆盖=最大独立集。
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; int n; int match[110]; bool v[110]; bool mp[110][110]; bool findmuniu(int x) { for(int i=1;i<=n;i++) { if(mp[x][i]==true) { if(v[i]==false) { v[i]=true; if(match[i]==0||findmuniu(match[i])==true) { match[i]=x; return true; } } } } return false; } int main() { freopen("river.in","r",stdin); freopen("river.out","w",stdout); int m,x,y; scanf("%d%d",&n,&m); memset(mp,false,sizeof(mp)); for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); mp[x][y]=true; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) if(k!=i) for(int j=1;j<=n;j++) if(k!=j&&i!=j) if(mp[i][k]==true&&mp[k][j]==true) mp[i][j]=true; int ans=0; for(int i=1;i<=n;i++) { memset(v,false,sizeof(v)); if(findmuniu(i)==true)ans++; } printf("%d\n",n-ans); return 0; }
pain and happy in the cruel world.