题目链接:http://acm.hdu.edu.cn/search.php?field=problem&key=2016ACM%2FICPC%D1%C7%D6%DE%C7%F8%B4%F3%C1%AC%D5%BE-%D6%D8%CF%D6%C8%FC%A3%A8%B8%D0%D0%BB%B4%F3%C1%AC%BA%A3%CA%C2%B4%F3%D1%A7%A3%A9&source=1&searchmode=source

 

A.染色乱搞。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 typedef struct Edge {
 5     int to, next;
 6 }Edge;
 7 
 8 const int maxn = 1010;
 9 int n, m, x, y;
10 int know[maxn], vis[maxn], color[maxn];
11 int ecnt, head[maxn];
12 Edge e[maxn*maxn];
13 
14 void init() {
15     ecnt = 0;
16     memset(head, -1, sizeof(head));
17     memset(know, 0, sizeof(know));
18     memset(vis, 0, sizeof(vis));
19     memset(color, 0, sizeof(color));
20 }
21 
22 void adde(int u, int v) {
23     e[ecnt].to = v, e[ecnt].next = head[u];
24     head[u] = ecnt++;
25 }
26 
27 bool dfs(int u) {
28     for(int i = head[u]; ~i; i=e[i].next) {
29         int v = e[i].to;
30         if(color[v] == color[u]) return 0;
31         if(vis[v]) continue;
32         vis[v] = 1;
33         color[v] = 3 - color[u];
34         if(!dfs(v)) return 0;
35     }
36     return 1;
37 }
38 
39 int main() {
40     // freopen("in", "r", stdin);
41     int u, v;
42     while(~scanf("%d%d%d%d",&n,&m,&x,&y)) {
43         init();
44         for(int i = 0; i < m; i++) {
45             scanf("%d%d",&u,&v);
46             adde(u, v); adde(v, u);
47             know[u] = know[v] = 1;
48         }
49         for(int i = 0; i < x; i++) {
50             scanf("%d", &u);
51             color[u] = 1; know[u] = 1;
52         }
53         for(int i = 0; i < y; i++) {
54             scanf("%d", &u);
55             color[u] = 2; know[u] = 1;
56         }
57         bool flag = 0;
58         for(int i = 1; i <= n; i++) {
59             if(!know[i]) {
60                 flag = 1;
61                 break;
62             }
63         }
64         if(flag) {
65             puts("NO");
66             continue;
67         }
68         for(int i = 1; i <= n; i++) {
69             if(color[i]) {
70                 vis[i] = 1;
71                 if(!dfs(i)) {
72                     flag = 1;
73                     break;
74                 }
75             }
76         }
77         for(int i = 1; i <= n; i++) {
78             if(!color[i]) {
79                 vis[i] = 1;
80                 color[i] = 1;
81                 if(!dfs(i)) {
82                     flag = 1;
83                     break;
84                 }
85             }
86         }
87         if(!flag) puts("YES");
88         else puts("NO");
89     }
90     return 0;
91 }
A

相关文章:

  • 2022-12-23
  • 2021-07-28
  • 2022-12-23
  • 2021-07-23
  • 2021-07-25
  • 2021-10-18
  • 2022-12-23
猜你喜欢
  • 2021-04-12
  • 2022-12-23
  • 2021-12-17
  • 2021-09-14
  • 2022-01-14
  • 2021-07-21
相关资源
相似解决方案