首页 > 代码库 > 辽宁省赛——杨鲁斯卡尔专场-J
辽宁省赛——杨鲁斯卡尔专场-J
题意:
就是一个人走到一个城市就会记录与该城市相连的城市有多少,最后判断这些城市是否全部相连;
样例输入
8
7 7 4 3 3 3 2 1
10
5 4 3 3 2 2 2 1 1 1
样例输出
NO YES
解题思路:
其实就是判断无向连通图,sum<=(t)*(t-1)/2公式,sum是边长的和,t是顶点个数。不过需要注意的有几点。1、是当输入有0的时候直接就是no
因为肯定不可能全部连通。2.是当输入等于2的时候可能这个公式判断不了需要自己做处理。
忘了写了打表的代码起就是用数组写的模拟过程,模拟是对的会超时,所以可以用这个打表这个代码也发上来吧,没有写注释
#include<iostream> #include<stdio.h> #include<vector> #include<iterator> #include<cstring> using namespace std; int pp[11005]; int main() { int n; while(scanf("%d",&n)!=EOF) { memset(pp,0,sizeof(pp)); int temp=2; int it,itr; int len= n; int ccc=0; while(temp<=len) { ccc++; cout<<temp<<","; int i=0,res=0; for(it=1;it<=n;it++) { if(pp[it]) continue; i++; if(i==temp) { len--; pp[it]=1; i=0; } } for(itr=temp+1;itr<=n;itr++) { if(!pp[itr]) { temp=itr; break; } } } //cout<<ccc<<")))))"; // printf("%d\n",len); } system("pause"); return 0; }
下面是AC代码
具体代码:
#include<iostream> #include<cstring> using namespace std; int num[10005]; int main() { int t,sum,res; while(scanf("%d",&t)!=EOF) { sum=0; res=0; memset(num,0,sizeof(num)); for(int i=0;i<t;i++) { cin>>num[i]; sum+=num[i]; if(num[i]==0) res=1; } if(t==2) { if(sum==2&&res==0) cout<<"YES"<<endl; else cout<<"NO"<<endl; } else { if(sum<=(t)*(t-1)/2&&res==0) cout<<"YES"<<endl; else cout<<"NO"<<endl; } } system("pause"); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。