codeforce 357B flag day.
事后过了几下,当时做的时候想的思路就是对的。
好像自己时间长点不敲代码信心就有点欠缺。
题目说每个dancer最多出现两次。
然后就可以第一次出现的三人随便选一个颜色。
而后每三人一组出现的。 其中一人不与另两人重复,并且已经有“颜色”的保持已有颜色不变,满足前面两个条件的任意一种颜色都可。
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <set>using namespace std;// 好机会让偶来做CF 哼!!int flag[100000];int vis[100000];int t[100000][5];int tag[10];void solve(int x, int y){ if(flag[t[x][y]]) return; else { for(int i = 1;i <= 3;i++) { int ok = 0; for(int j = 1;j <= 3;j++) { if(y == j) continue; else { if(i == flag[t[x][j]]) { ok = 1; break;} } } if(!ok) { flag[t[x][y]] = i; return ; } } }}int main(){ //freopen("in.txt", "r", stdin); int n, m; while(scanf("%d %d", &n, &m) != EOF) { memset(flag, 0, sizeof(flag)); memset(vis, 0, sizeof(vis)); memset(t, 0, sizeof(t)); for(int i = 1;i <= m;i++) { for(int j = 1;j <= 3;j++) { scanf("%d", &t[i][j]); } } for(int i = 1;i <= m;i++) { for(int j = 1;j <= 3;j++) solve(i, j); } for(int i = 1;i <= n;i++) printf("%d ",flag[i]); printf("\n"); } return 0;}