AIM Tech Round (Div. 2)C - Graph and String(二分图染色)
来源:互联网 发布:大麦盒子dm1001网络锁 编辑:程序博客网 时间:2024/06/16 05:01
题意:
赛上没想出解法,赛后虽然讨论了出来,却发现有一个神trick,也就是这题是肯定会挂的QAQ。题意我就不多说了,读题就懂,我就说这题怎么转化的。首先,根据题意,那么只有a和c是不会连边的,也就是说,没有连的边就是一个a,一个c,那么我们就可以反过来建图,用没连的边来建一个图,那么这个图是不是每一条边的两个节点一定是不同的染色,这不就是典型的二分图染色么?想到这里肯定是很激动的,于是就去写了,然后wa26,没错,就是这个神trick。为何会出现这个问题,因为你根据没有的边建图,并不能保证他不会和其他的边相连,你把这个样例模拟一下会发现,你跑出来的结果了一条边,所以说我们必须在找到一个可行解后,依照规则再次检查是否符合题目给我们的图,就可以了。
代码:
//// Created by CQU_CST_WuErli// Copyright (c) 2015 CQU_CST_WuErli. All rights reserved.//// #include<bits/stdc++.h>#include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>#include <cctype>#include <cmath>#include <string>#include <vector>#include <list>#include <map>#include <queue>#include <stack>#include <set>#include <algorithm>#include <sstream>#define CLR(x) memset(x,0,sizeof(x))#define OFF(x) memset(x,-1,sizeof(x))#define MEM(x,a) memset((x),(a),sizeof(x))#define For_UVa if (kase!=1) cout << endl#define BUG cout << "I am here" << endl#define lookln(x) cout << #x << "=" << x << endl#define SI(a) scanf("%d",&a)#define SII(a,b) scanf("%d%d",&a,&b)#define SIII(a,b,c) scanf("%d%d%d",&a,&b,&c)#define rep(flag,start,end) for(int flag=start;flag<=end;flag++)#define Rep(flag,start,end) for(int flag=start;flag>=end;flag--)#define Lson l,mid,rt<<1#define Rson mid+1,r,rt<<1|1#define Root 1,n,1#define BigInteger bigntemplate <typename T> T gcd(const T& a,const T& b) {return b==0?a:gcd(b,a%b);}const int MAX_L=2005;// For BigIntegerconst int INF_INT=0x3f3f3f3f;const long long INF_LL=0x7fffffff;const int MOD=1e9+7;const double eps=1e-9;const double pi=acos(-1);typedef long long ll;using namespace std;int n,m;int mp[550][550];int vis[550];vector<int> g[550];int col[550];char s[550];bool dfs(int u,int c) { col[u]=c; for (int i=0;i<g[u].size();i++) { int v=g[u][i]; if (!col[v]) { if (!dfs(v,-c)) return false; } else if (col[v]==col[u]) return false; } return true;}int main(){#ifdef LOCAL freopen("C:\\Users\\john\\Desktop\\in.txt","r",stdin);// freopen("C:\\Users\\john\\Desktop\\out.txt","w",stdout);#endif while (SII(n,m)==2) { CLR(mp); rep(i,0,n) g[i].clear(); rep(i,1,m) { int u,v; SII(u,v); mp[u][v]=mp[v][u]=1; } CLR(vis); rep(i,1,n) rep(j,i+1,n) if (!mp[i][j]) { g[i].push_back(j); g[j].push_back(i); vis[i]=vis[j]=1; } CLR(col); int flag=1; rep (i,1,n) if (vis[i] && !col[i]) { if (!dfs(i,1)) { flag=0;break; } } CLR(col); rep(i,1,n) if (vis[i] && !col[i]) { if (!dfs(i,-1)) { flag=0;break; } } if (!flag) puts("No"); else { rep(i,1,n) { if (!vis[i]) s[i]='b'; else if (col[i]==1) s[i]='a'; else s[i]='c'; } rep(i,1,n) rep(j,1,n) if (i!=j) { if (abs(s[i]-s[j])<=1 && !mp[i][j]) { flag=0;break; } if (abs(s[i]-s[j])>1 && mp[i][j]) { flag=0;break; } } if (!flag) puts("No"); else { puts("Yes"); for (int i=1;i<=n;i++) cout << s[i]; cout << endl; } } } return 0;}
0 0
- AIM Tech Round (Div. 2) C. Graph and String(二分图染色 | 贪心)
- AIM Tech Round (Div. 2)C - Graph and String(二分图染色)
- AIM Tech Round (Div. 2) C. Graph and String 二分图染色
- cf#AIM Tech Round -C. Graph and String-贪心/ 二分图染色
- AIM Tech Round (Div. 2) C. Graph and String
- AIM Tech Round (Div. 2) C. Graph and String
- AIM Tech Round (Div. 2)-C. Graph and String
- Codeforces - AIM Tech Round (Div. 2)C - Graph and String(练习)
- #AIM Tech Round [div2] C. Graph and String 【连通图、染色】
- AIM Tech Round [div2] C. Graph and String
- Codeforces AIM Tech Round (Div. 1) A Graph and String 想法
- Codeforces AIM Tech Round (Div. 1)623A Graph and String
- AIM Tech Round 4 (Div. 2) C
- CodeForces 624C Graph and String(二分图染色)
- AIM Tech Round (Div. 2)--B. Making a String
- Codeforces AIM Tech Round (Div. 2) B. Making a String
- Codeforces 624C:Graph and String 二分图染色
- AIM Tech Round 3 (Div. 2) C.Letters Cyclic Shift
- POJ 2991 线段树
- 利用WCF的Duplex服务向Winform程序推送消息
- 经典算法学习——快速找出数组中两个数字,相加等于某特定值
- 我所知道的CallbackContract in WCF
- TCP,IP,HTTP,SOCKET区别讲解
- AIM Tech Round (Div. 2)C - Graph and String(二分图染色)
- 【slighttpd】基于lighttpd架构的Server项目实战(6)—预备知识之Http
- *Firefox*的*Firebug*进行JavaScript调试
- 基于net.tcp的WCF配置实例解析
- linux find命令使用
- [7] CMake总结 - 4 INSTALL
- ALSA和OSS编程示例
- hdu 4309
- win7系统的IIS6与Frameworks2配置