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


題目鏈接:http://61.187.179.132/JudgeOnline/problem.php?id=1143

題意:給出一個有向無環圖。在其中找出一個最大的點集使得點集中任意兩個點之間不可達。

思路:首先在給出圖中跑一次floyd,這樣g[i][j]=1則i可到達j。那么題意就是求最大獨立集。最大獨立集=|G|-最小頂點覆蓋=|G|-二分圖最大匹配。

 

int g[N][N],match[N],visit[N];
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);
}

 

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com