题目链接:http://codeforces.com/contest/781/problem/B
去tmd 2-SAT
直接贪心就可以过去了,优先选择第二种情况。
然而....可以被叉掉(数据水了)

2 ABC DDD ABD DOG
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<vector> 5 #include<cstdlib> 6 #include<cmath> 7 #include<cstring> 8 #include<map> 9 using namespace std; 10 #define maxn 1001000 11 #define llg long long 12 #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout); 13 llg n,m; 14 string a,s1,s2,la,b; 15 string ans[maxn]; 16 map<string,bool>ma,mma; 17 18 19 int main() 20 { 21 yyj("D"); 22 cin>>n; 23 for (llg k=1;k<=n;k++) 24 { 25 s1.clear(),s2.clear(); 26 cin>>s1>>s2; 27 a.clear(); 28 a=s1.substr(0,3); 29 b=s1.substr(0,2)+s2[0]; 30 if (!ma[b]) 31 { 32 ma[b]=1; 33 ans[k]=b; 34 mma[a]=1; 35 } 36 else 37 { 38 if (ma[a] || mma[a]){cout<<"NO"; return 0;} 39 ans[k]=a; 40 ma[a]=1; 41 } 42 43 } 44 cout<<"YES"<<endl; 45 for (llg i=1;i<=n;i++) 46 { 47 cout<<ans[i]<<endl; 48 } 49 return 0; 50 }