本文主要是介绍http://poj.org/problem?id=1975同上,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意给你n个珠子,然后给你M种珠子间重量关系,让你求出有多少不处在中间重量的珠子个数。
思路:首先依题意可知珠子总数为奇数,根据珠子之间的关系建图,如果一个珠子的入度或者出度大于n/2说明有大于一半的珠子大于该珠子或者有大于一半的珠子小于该珠子,因此可以根据这可以得出不处在中间重量的个数。
代码:
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
#define N 100
#define FOR(i,s,t) for(int i=(s);i<=(t);++i)
using namespace std;
bool map[N][N];
int n,m;
void floyd()
{ FOR(k,1,n)
FOR(i,1,n)
FOR(j,1,n)
if((map[i][k]&&map[k][j])||map[i][j])
map[i][j]=true;
}
int main()
{ int t;
cin>>t;
while(t--)
{ scanf("%d%d",&n,&m);
FOR(i,1,n)
FOR(j,1,n)
if(i==j) map[i][j]=true;
else map[i][j]= false;
FOR(i,1,m)
{ int a,b;
scanf("%d%d",&a,&b);
map[a][b]=true;
}
floyd();
int ans=0;
FOR(i,1,n)
{ int in=0,out=0;
FOR(j,1,n)
if(i==j) continue;
else{ if(map[i][j]) out++;
if(map[j][i]) in++;
}
if(in>n/2||out>n/2) ans++;
}
printf("%d\n",ans);
} return 0;
}
这篇关于http://poj.org/problem?id=1975同上的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!