C. Graph and String 构造构造构造
根据题目特点,b和所有的其他点相连,能先确定b
确定b后再找到第一个不是b的,赋值为a,或者为c,反正都是对称的
赋完值后,对于所有的点,要么和这个点连,要么不联
联的话如果是b就是b,不是b就只能是a
不联的话只能是c
这样一通构造就能得到一个序列,但不一定保证合法
最后再check一下
:
#include<bits/stdc++.h> using namespace std; int n,m; int e[1000][1000],in[1000]; char s[1000]; int main() { cin>>n>>m; memset(in,0,sizeof(in)); memset(e,0,sizeof(e)); for(int i=1;i<=m;i++) { int l,r; cin>>l>>r; e[l][r]=1; e[r][l]=1; in[r]++; in[l]++; } for(int i=1;i<=n;i++) { if(in[i]==n-1) { s[i]='b'; } } int k=1; while(s[k]=='b'&&k<=n) { k++; } s[k]='a'; for(int i=1;i<=n;i++) { if(i==k) continue; if(in[i]!=n-1&&e[k][i]) { s[i]='a'; } else if(in[i]!=n-1&&!e[k][i]) { s[i]='c'; } } int ok=1; for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) { if(i==j) continue; if(e[i][j]==1) { if(s[i]=='a'&&s[j]=='c'||s[i]=='c'&&s[j]=='a') { ok=0; } } else { if(s[i]==s[j]||s[i]=='a'&&s[j]=='b'||s[i]=='b'&&s[j]=='a'||s[i]=='c'&&s[j]=='b'||s[i]=='b'&&s[j]=='c') { ok=0; } } } if(ok) { cout<<"YES"<<endl; for(int i=1;i<=n;i++) { cout<<s[i]; } } else cout<<"NO"; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)