博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【CodeForces 624C】Graph and String
阅读量:7301 次
发布时间:2019-06-30

本文共 1014 字,大约阅读时间需要 3 分钟。

题意

n个表示abc三个字符的点,所有a和b是相连的,所有b和c是相连的,所有相同的是相连的,现在给你n个点和他们之间的m条边,判断是否存在这样的字符串,存在则给出一个符合条件的。

分析

我的做法是找出所有的b,因为b是只和自己本身没有连接,所以有n-1个连线,然后找出第一个不是b的,然后所有和该点没有连线的都设置为c,有连线而不是b的就设置为a,然后再把该点设置为a。

接下来,根据题目条件,判断一下我设置出来的字符串成不成立。就是如果不相连接却是相同字母或者有b字母,还有如果相连接却是a和c,那都是不符合的。

代码

#include 
#include
#define F(a,b,c) for(int a=b;a<=c;a++)#define N 505using namespace std;int n,m,a[N][N],l[N],u,v,ans,ok;char s[N];int main(){ scanf("%d%d",&n,&m); F(i,1,m){ scanf("%d%d",&u,&v); a[u][v]=a[v][u]=1; l[u]++; l[v]++; } F(i,1,n) if(l[i]==n-1) s[i]='b'; int i=1; while(s[i]=='b'&&i<=n) i++; F(j,1,n) if(!a[i][j]) s[j]='c'; else if(s[j]!='b') s[j]='a'; s[i]='a'; F(i,1,n&&ok!=-1) F(j,i+1,n) if(!a[i][j]&&(s[i]==s[j]||s[i]=='b') ||a[i][j]&&(s[i]=='a'&&s[j]=='c')) ok=-1; if(ok==-1) printf("No\n"); else { printf("Yes\n"); F(j,1,n) printf("%c",s[j]); } return 0;}

 

转载地址:http://ogynm.baihongyu.com/

你可能感兴趣的文章
aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【把数据存到LBS云2/2】
查看>>
SparkMLlib聚类学习之KMeans聚类
查看>>
如果让莎士比亚、海明威编写JavaScript代码
查看>>
每日一“酷”之bisect
查看>>
Inherits、CodeFile、CodeBehind的区别
查看>>
用Seam实现:图片上传 + 保存到数据库 + 从数据库读出图片并显示到页面中
查看>>
802.3标准
查看>>
java爬虫笔记
查看>>
JSP导入EXCEL样式
查看>>
2.Hadoop集群安装进阶
查看>>
java研发工作组环境架设
查看>>
代码片收集
查看>>
网站备案与备案注销
查看>>
书单丨打开投资理财之路,从这25本书开始
查看>>
Less 创建css3动画@keyframes函数
查看>>
.NET Framework 4 与 .NET Framework 4 Client Profile的区别与联系
查看>>
Que pensez-vous de air jordan pas cher
查看>>
SQL Server 2008创建定期自动备份任务(转)
查看>>
SimpleDateFormat
查看>>
epoll_wait会被系统中断唤醒
查看>>