Go to diff to previous submission
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<ctype.h> #include<math.h> #include<vector> using namespace std; #define FOR(i,a,b) for(int i=a; i<=b; i++) #define PII pair<int, int> #define MP make_pair #define PB push_back #define SIZE(s) ((int)(s).size()) #define ll long long #define MAX 10047 int N, M; vector<int> G[MAX]; int colors[MAX]; int color; void dfs(int v) { colors[v] = color; FOR(i,0, SIZE(G[v])-1) { int u = G[v][i]; if (colors[u] == 0) dfs(u); } } int V[MAX]; int st4[MAX]; int st3[MAX]; int main() { int a, b; while(scanf("%d %d",&N, &M)== 2) { FOR(i,0,N-1) G[i].clear(); FOR(i,0,N-1) V[i] = 0; while(M--) { scanf("%d %d",&a,&b); a--; b--; G[a].PB(b); G[b].PB(a); V[a]++; V[b]++; } color = 0; FOR(i,0,N-1) colors[i] = 0; FOR(i,0,N-1) { if (colors[i] == 0) { color++; dfs(i); } } // FOR(i,0,N-1) cout << colors[i] << endl; bool ok = false; FOR(c,1,color) { st4[c] = 0; st3[c] = 0; } FOR(i,0,N-1) { if (V[i] > 3) st4[ colors[i] ]++; if (V[i] > 2) st3[ colors[i] ]++; } FOR(c,1,color) { if (st4[c] >= 1) ok = true; if (st3[c] >= 2) ok = true; } if (ok) puts("YES"); else puts("NO"); } return 0; }
--- c5.s470.cteam079.fn.cpp.0.fn.cpp +++ c5.s528.cteam079.fn.cpp.0.fn.cpp @@ -16,5 +16,5 @@ #define PB push_back -#define SIZE(s) (int)(s).int() +#define SIZE(s) ((int)(s).size()) #define ll long long @@ -22,6 +22,25 @@ #define MAX 10047 -int V[MAX]; int N, M; +vector<int> G[MAX]; + +int colors[MAX]; +int color; + +void dfs(int v) +{ + colors[v] = color; + FOR(i,0, SIZE(G[v])-1) + { + int u = G[v][i]; + if (colors[u] == 0) + dfs(u); + } +} + +int V[MAX]; + +int st4[MAX]; +int st3[MAX]; int main() @@ -30,4 +49,5 @@ while(scanf("%d %d",&N, &M)== 2) { + FOR(i,0,N-1) G[i].clear(); FOR(i,0,N-1) V[i] = 0; while(M--) @@ -35,14 +55,43 @@ scanf("%d %d",&a,&b); a--; b--; + G[a].PB(b); + G[b].PB(a); V[a]++; V[b]++; } + color = 0; + FOR(i,0,N-1) colors[i] = 0; + FOR(i,0,N-1) + { + if (colors[i] == 0) + { + color++; + dfs(i); + } + } + + // FOR(i,0,N-1) cout << colors[i] << endl; + bool ok = false; + FOR(c,1,color) + { + st4[c] = 0; + st3[c] = 0; + } FOR(i,0,N-1) { - if (V[i] >= 4) ok = true; + if (V[i] > 3) + st4[ colors[i] ]++; + if (V[i] > 2) + st3[ colors[i] ]++; } + FOR(c,1,color) + { + if (st4[c] >= 1) ok = true; + if (st3[c] >= 2) ok = true; + } + if (ok) puts("YES"); else puts("NO");