您的位置:首页 > 其它

BZOJ 1143 祭祀 river(最大独立集)

2014-06-20 16:29 302 查看
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1143

题意:给出一个有向无环图。在其中找出一个最大的点集使得点集中任意两个点之间不可达。

思路:首先在给出图中跑一次floyd,这样g[i][j]=1则i可到达j。那么题意就是求最大独立集。最大独立集=|G|-最小顶点覆盖=|G|-二分图最大匹配。

int g

,match
,visit
;
int n;

int DFS(int u)
{
int i;
FOR1(i,n) if(!visit[i]&&g[u][i])
{
visit[i]=1;
if(match[i]==-1||DFS(match[i]))
{
match[i]=u;
return 1;
}
}
return 0;
}

int m;

int main()
{
RD(n,m);
int i,x,y;
FOR1(i,m)
{
RD(x,y);
g[x][y]=1;
}
int j,k;
FOR1(k,n) FOR1(i,n) FOR1(j,n) if(g[i][k]&&g[k][j])
{
g[i][j]=1;
}
clr(match,-1);
int ans=0;
FOR1(i,n)
{
clr(visit,0);
if(DFS(i)) ans++;
}
PR(n-ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: