NC205213. 牛妹的游戏
描述
输入描述
第一行一个正整数 T,表示数据组数。每组数据的第一行有两个正整数 n 和 m,表示场上总据点数为 n,此时蓝方已经形成了 m 条控制链。接下来 m 行,每行有两个正整数 x 和 y,表示这条控制链由据点 x 和据点 y 形成。
输出描述
对于每组数据,如果目前场上有可能存在被玩家控制的区域,则输出一行 "yes",否则输出一行 "no"。(均不包含引号)
示例1
输入:
2 3 3 1 2 2 3 3 1 5 5 1 2 2 3 3 4 4 5 5 1
输出:
yes no
说明:
C++14(g++5.4) 解法, 执行用时: 178ms, 内存消耗: 3360K, 提交时间: 2020-04-29 14:07:19
#include<bits/stdc++.h> using namespace std; const int N=5e4+10; long long t,n,m,x,y,der[N],sum; void init(){ memset(der,0,sizeof der); sum=0; } int main(){ for(cin>>t;t--;){ cin>>n>>m; init(); for(int i=0;i<m;i++){ cin>>x>>y; der[x]++, der[y]++; } for(int i=1;i<=n;i++) sum+=(n-1-der[i])*der[i]; sum>>=1; if(n*(n-1)*(n-2)/6-sum>0) puts("yes"); else puts("no"); } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 67ms, 内存消耗: 736K, 提交时间: 2020-04-24 19:14:56
#include<bits/stdc++.h> using namespace std; const int N=50010; int t[N]; int T,n,m; int main(){ scanf("%d",&T); while(T--){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) t[i]=0; int x,y; for(int i=1;i<=m;i++){ scanf("%d %d",&x,&y); t[x]++;t[y]++; } long long tot=0; for(int i=1;i<=n;i++) tot+=1ll*(n-t[i]-1)*t[i];tot/=2; printf(1ll*n*(n-1)*(n-2)/6-tot>0?"yes\n":"no\n"); } }