poj1975 Median Weight Bead ----floyd 传递闭包

来源:互联网 发布:tensorflow源码结构 编辑:程序博客网 时间:2024/05/29 04:47
/*poj1975 Median Weight Bead题意:有N个珠子,N为奇数(an odd number),给出一些信息如a b表示a比b重,通过这些信息可以分析出那些珠子按重量排序后,哪个不可能是中间那个,求可以分析出几个。用到的是floyd求传递闭包,然后找到那些入度或出度大于n/2的珠子即可*/#include<stdio.h>#include<string.h>int g[100][100];//g[i][j]表示j比i轻void floyd(int n){int i,j,k;for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++)g[i][j]=(g[i][j]||(g[i][k]&&g[k][j]));//若j已经比i轻,或有个k可以实现j比k轻,k比i轻,可得j比i轻}int main(){int a,b,t,n,m,i,j;scanf("%d",&t);while(t--){memset(g,0,sizeof(g));scanf("%d%d",&n,&m);for(i=0;i<m;i++){scanf("%d%d",&a,&b);g[a][b]=1;}floyd(n);int ans=0;for(i=1;i<=n;i++){int da=0,xiao=0;for(j=1;j<=n;j++)if(g[i][j])xiao++;else if(g[j][i])da++;if(da>n/2||xiao>n/2)ans++;}printf("%d\n",ans);}return 0;}


原创粉丝点击