首页 > 代码库 > BZOJ2199 [Usaco2011 Jan]奶牛议会
BZOJ2199 [Usaco2011 Jan]奶牛议会
首先激励一个2-SAT的裸模型,然后发现。。。tarjan没法判断‘?‘的情况
于是暴力对每一个议案check一下,直接dfs即可
1 /************************************************************** 2 Problem: 2199 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:160 ms 7 Memory:884 kb 8 ****************************************************************/ 9 10 #include <cstdio> 11 #include <cstring> 12 #include <algorithm> 13 14 using namespace std; 15 const char ch[3] = {‘?‘, ‘N‘, ‘Y‘}; 16 const int N = 2005; 17 const int M = N << 2; 18 19 struct edge { 20 int next, to; 21 edge() {} 22 edge(int _n, int _t) : next(_n), to(_t) {} 23 } e[M]; 24 25 int n, m; 26 int first[N], tot; 27 bool vis[N]; 28 int ans[N]; 29 30 int read() { 31 int x = 0; 32 char ch = getchar(); 33 while (ch < ‘0‘ || ‘9‘ < ch) 34 ch = getchar(); 35 while (‘0‘ <= ch && ch <= ‘9‘) 36 (x *= 10) += ch - ‘0‘, ch = getchar(); 37 return x; 38 } 39 40 int get() { 41 int x = read(); 42 char ch = getchar(); 43 while (ch != ‘Y‘ && ch != ‘N‘) 44 ch = getchar(); 45 if (ch == ‘Y‘) --(x <<= 1); 46 else x <<= 1; 47 return x; 48 } 49 50 void add_edge(int x, int y) { 51 e[++tot] = edge(first[x], y); 52 first[x] = tot; 53 } 54 55 #define y e[x].to 56 void dfs(int p) { 57 int x; 58 vis[p] = 1; 59 for (x = first[p]; x; x = e[x].next) 60 if (!vis[y]) dfs(y); 61 } 62 #undef y 63 64 bool check(int p) { 65 int i; 66 memset(vis, 0, sizeof(vis)); 67 dfs(p); 68 for (i = 1; i <= n; ++i) 69 if (vis[2 * i] && vis[2 * i - 1]) return 0; 70 return 1; 71 } 72 73 74 int main() { 75 int i, a, b, c, d, p, q; 76 n = read(), m = read(); 77 for (i = 1; i <= m; ++i) { 78 a = get(), c = get(); 79 if (a & 1) b = a + 1; 80 else b = a - 1; 81 if (c & 1) d = c + 1; 82 else d = c - 1; 83 add_edge(b, c); 84 add_edge(d, a); 85 } 86 for (i = 1; i <= n; ++i) { 87 p = check(2 * i - 1); 88 q = check(2 * i); 89 if (!p && !q) { 90 puts("IMPOSSIBLE"); 91 return 0; 92 } 93 else if (p && q) ans[i] = 0; 94 else if (!p) ans[i]= 1; 95 else ans[i] = 2; 96 } 97 for (i = 1; i <= n; ++i) 98 putchar(ch[ans[i]]); 99 puts("");100 return 0;101 }
BZOJ2199 [Usaco2011 Jan]奶牛议会
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。