首页 > 代码库 > tyvj2059 元芳看电影
tyvj2059 元芳看电影
描述
神探狄仁杰电影版首映这天,狄仁杰、李元芳和狄如燕去看电影。由于人实在是太多了,入场的队伍变得十分不整齐,一个人的前面可能会出现并排的好多人。
“元芳,这队伍你怎么看?”
“大人,卑职看不出这队伍是怎么排的!但是卑职看出了一些两个人之间的前后关系!”
“那么我们可以写个程序计算出来一定没有和其它人并排的人数。”
“大人/叔父真乃神人也!”
“元芳,这队伍你怎么看?”
“大人,卑职看不出这队伍是怎么排的!但是卑职看出了一些两个人之间的前后关系!”
“那么我们可以写个程序计算出来一定没有和其它人并排的人数。”
“大人/叔父真乃神人也!”
输入格式
第一行两个数N、M,表示队伍一共有N个人,元芳看出了M对关系。
接下来M行每行两个数a、b,表示a在b的前面(不一定正好在b的前面,ab之间可能有其他人)。
接下来M行每行两个数a、b,表示a在b的前面(不一定正好在b的前面,ab之间可能有其他人)。
输出格式
有多少个人一定没有和其他人并排。
测试样例1
输入
3 2
1 2
1 3
输出
1
备注
对于100%的数据,1<=N<=100,0<=M<=4500。数据保证M对关系不出现矛盾。sjynoi
思路:
floyd传递闭包,如果所有人除了自己都在都在自己的前或后,就一定不并排
floyd传递闭包,如果所有人除了自己都在都在自己的前或后,就一定不并排
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<vector>using namespace std;const int maxn = 105;const int maxint = 100000000;int n,m,g[maxn][maxn],tg[maxn][maxn],ans,nowans;void input(){ cin>>n>>m; int u,v; for(int i = 1;i <= m;i++){ cin>>u>>v; g[u][v] = 1; }}void build(){ for(int k = 1;k <= n;k++){ for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ if(k != i && k != j && i != j) g[i][j] = g[i][j] || (g[i][k] && g[k][j]); } } } for(int i = 1;i <= n;i++){ nowans = 0; for(int j = 1;j <= n;j++){ if(g[i][j]) nowans++; if(g[j][i]) nowans++; } if(nowans == n-1) ans++; } cout<<ans<<endl;}int main(){ input(); build();}
tyvj2059 元芳看电影
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。