[二分图最大独立集]BZOJ 1143—— [CTSC2008]祭祀river
2017-08-07 21:55
381 查看
题目梗概
给定一张有向图,在这个图上的一些节点放上标记且任意标记节点不被其他标记节点到达。使标记节点个数最大化。
解题思路
对于每一个点还是进行拆点操作,这样就形成一张二分图。题目答案显然就是二分图的最大独立集。
最大独立集=n-最小顶点覆盖,不懂戳这
#include<cstdio> #include<cstring> using namespace std; const int maxn=105,maxm=1005; int n,m,lnk[maxn],f[maxn],ans,tot,tim,vis[maxn],c[maxn][maxn]; bool find(int x){ for (int i=1;i<=n;i++) if (c[x][i]&&vis[i]!=tim){ vis[i]=tim; if (!f[i]||find(f[i])){ f[i]=x; return 1; } } return 0; } int main(){ freopen("exam.in","r",stdin); freopen("exam.out","w",stdout); scanf("%d%d",&n,&m); for (int i=1,x,y;i<=m;i++){ scanf("%d%d",&x,&y); c[x][y]=1; } for (int k=1;k<=n;k++) for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) c[i][j]=c[i][j]|(c[i][k]&c[k][j]); for (int i=1;i<=n;i++){ tim++; if (find(i)) ans++; } printf("%d\n",n-ans); return 0; }
相关文章推荐
- BZOJ 1143: [CTSC2008]祭祀river(二分图最大点独立集)
- bzoj 1143:[CTSC2008]祭祀river 二分图最大独立集
- BZOJ 1143: [CTSC2008]祭祀river 二分图最大点独立集
- BZOJ 1143: [CTSC2008]祭祀river 二分图,最大独立集,Floyd闭包
- [BZOJ 1143][CTSC 2008]祭祀river(二分图最大独立集)
- 【bzoj1143 CTSC2008】祭祀river(最大独立集--二分图匹配)
- 【BZOJ1143】【CTSC2008】祭祀river 传递闭包、最大点独立集(网络流写的)
- BZOJ 1143 CTSC2008 祭祀river 二分图最大匹配
- bzoj 1143: [CTSC2008]祭祀river(Floyed+二分图的最大匹配)
- BZOJ 1143: [CTSC2008]祭祀river 最大独立集
- 洛谷P2774 方格取数问题 BZOJ 1143祭祀river【二分图最大独立集】
- 【BZOJ】1143 [CTSC2008]祭祀river 二分图
- 【BZOJ 1143】[CTSC2008]祭祀river 二分图
- BZOJ 1143 [CTSC2008]祭祀river 二分图极大点独立集
- BZOJ1143:祭祀river(二分图求有向图的最大点独立集)
- [1143] [CTSC2008]祭祀river(最大独立集 || 偏序集最大反链)
- [bzoj1143][CTSC2008]祭祀river 最大独立集+floyd
- BZOJ 1143 [CTSC2008]祭祀river(二分图匹配)
- bzoj1143 [CTSC2008]祭祀river
- BZOJ1143 祭祀river [二分图最大匹配]