当前位置: 代码迷 >> 综合 >> poj 3275 Ranking the Cows floyd算法
  详细解决方案

poj 3275 Ranking the Cows floyd算法

热度:82   发布时间:2024-01-19 06:27:40.0

题意:

有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;	
}