[SCU 4522] 寻找fly真迹 (脑洞+构造)
来源:互联网 发布:程序员猝死的原因 编辑:程序博客网 时间:2024/04/28 13:47
SCU - 4522
给定一个只含小写 a、b、c的字符串
其中每个字母和字典序相等和相邻的字母相连
给出连好边的一张图,问是否是一个合法状态
首先 b和所有字母都连上了边,
所以图中与所有字母连上边的都是 b,可以先去掉
然后整张图就变成了两个联通块,一个是 a的,一个是 b的
并且每个联通块都是完全图
判断一下是不是两个联通块,是不是两个完全图就好了
#pragma comment(linker, "/STACK:102400000,102400000")#include <cstdio>#include <iostream>#include <cstdlib>#include <cstring>#include <algorithm>#include <cmath>#include <map>#include <set>#include <queue>using namespace std;typedef pair<int,int> Pii;typedef long long LL;typedef unsigned long long ULL;typedef double DBL;typedef long double LDBL;#define MST(a,b) memset(a,b,sizeof(a))#define CLR(a) MST(a,0)#define Sqr(a) (a*a)const int maxn=500+10, maxm=maxn*maxn;struct Graph{ int ndn,edn,last[maxn]; int u[2*maxm],v[2*maxm],nxt[2*maxm]; void init(int a){ndn=a; edn=0; MST(last,-1);} void adde(int tu,int tv) { u[edn]=tu; v[edn]=tv; nxt[edn]=last[tu]; last[tu]=edn++; }};int N,M;Graph G;int deg[maxn];int ban[maxn];int bsiz[10];int main(){ #ifdef LOCAL freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout); #endif int T; scanf("%d", &T); for(int ck=1; ck<=T; ck++) { scanf("%d%d", &N, &M); G.init(N); CLR(deg); CLR(ban); CLR(bsiz); for(int i=0; i<M; i++) { int u,v; scanf("%d%d", &u, &v); G.adde(u,v); G.adde(v,u); deg[u]++; deg[v]++; } for(int u=1; u<=N; u++) if(deg[u]==N-1) ban[u]=-1; int bcnt=0; for(int i=1; i<=N; i++) { if(ban[i]) continue; else { bcnt++; if(bcnt>2) break; int tot=0; queue<int> que; que.push(i); ban[i]=bcnt; while(que.size()) { int u=que.front(); que.pop(); tot++; for(int e=G.last[u]; ~e; e=G.nxt[e]) { int v=G.v[e]; if(!ban[v]) { que.push(v); ban[v]=bcnt; } if(ban[v]==-1) deg[u]--; } } bsiz[bcnt]=tot; } } if(bcnt>2) puts("No"); else {// for(int i=1; i<=N; i++) printf("%d ", ban[i]); puts("");// for(int i=1; i<=N; i++) if(~ban[i]) printf("%d ", deg[i]); puts("");// for(int i=1; i<=bcnt; i++) printf("%d ", bsiz[bcnt]); puts(""); bool ok=1; for(int i=1; i<=N; i++) { if(ban[i]>0 && deg[i]!=bsiz[ban[i]]-1) {ok=0; break;} } if(ok) puts("Yes"); else puts("No"); } } return 0;}
0 0
- [SCU 4522] 寻找fly真迹 (脑洞+构造)
- SCU 4522 寻找fly真迹(二分图染色)
- fly(树状数组)
- SCU
- SCU
- SCU
- SCU
- 【SCU
- SCU
- SCU
- SCU
- (SCU
- SCU
- SCU
- SCU
- SCU
- 真迹调试小错误
- scu(snoop control unit)
- 今天我开通了博客
- ubuntu下小米真机调试
- Dubbo实战教程--Hudson持续集成服务器的安装配置与使用
- 【年度技术观点合集】计算机视觉,自然语言,机器学习…看看顶级科学家们怎么说
- activiti5.13 框架 数据库设计说明书
- [SCU 4522] 寻找fly真迹 (脑洞+构造)
- 设计模式读书笔记(一) Abstract Factory(抽象工厂)模式
- 解决电脑卡住不能显示桌面怎么办?
- 【年度开源、工具合集】牛津计划,DMTK,Graph Engine…提高你的工作效率!
- cocos2dx 历史版本下载问题
- MyEclipse 7.0 用java代码生成序列号
- 笔试题74. LeetCode OJ (61)
- 磁盘排序
- 【年度学术大会合集】SIGGRAPH,KDD,AAAI,NIPS…这些你想参加的会议