题意:
有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;
}