题意:
有n有牛,已经确定了m对大小关系,求还需确定多少对大小关系可以对这n头牛排序。
思路:
最后可排序时有n*(n-1)/2对关系,现在对已确定的关系用floyd求闭包得到现在可确定的关系数k,相减即为答案。
代码:
//poj 3275
//sepNINE
#include <iostream>
using namespace std;
const int maxN=1024;
int g[maxN][maxN],pre[maxN][maxN],next[maxN][maxN];
int main()
{
int n,m;
memset(g,0,sizeof(g));
memset(pre,0,sizeof(pre));
memset(next,0,sizeof(next));
scanf("%d%d",&n,&m);
while(m--){
int a,b;
scanf("%d%d",&a,&b);
g[a][b]=1;
next[a][++next[a][0]]=b;
pre[b][++pre[b][0]]=a;
}
int k,i,j;
for(k=1;k<=n;++k)
for(i=1;i<=pre[k][0];++i){
int u=pre[k][i];
for(j=1;j<=next[k][0];++j){
int v=next[k][j];
if(g[u][v]==0){
g[u][v]=1;
pre[v][++pre[v][0]]=u;
next[u][++next[u][0]]=v;
}
}
}
int ans=0;
for(k=1;k<=n;++k)
ans+=pre[k][0]+next[k][0];
printf("%d",n*(n-1)/2-ans/2);
return 0;
}