Submission #4132

#TimeUsernameProblemLanguageResultExecution timeMemory
4132pys7293Cactus? Not cactus? (kriii1_C)C++98
0 / 1
0 ms2120 KiB
#include <algorithm> #include <cstdio> #include <map> #include <memory.h> #include <vector> using namespace std; int N, M; int Lv[111111], C; int Lo[111111]; map<int, map<int, bool> > Chk; vector<vector<int> > L; void DFS(int i, int P) { if (Lv[i] == 0) Lv[i] = Lo[i] = ++C; for (int j = 0; j < L[i].size(); j++) { if (P == L[i][j]) continue; if (Lv[L[i][j]] == 0) { DFS(L[i][j], i); Lo[i] = min(Lo[i], Lo[L[i][j]]); if (i > 1 && i < Lo[L[i][j]]) Chk[i][L[i][j]] = Chk[L[i][j]][i] = true; } else Lo[i] = min(Lo[i], Lo[L[i][j]]); } } int main(void) { scanf("%d%d", &N, &M); L.resize(N + 1); for (int i = 1; i <= M; i++) { int u, v; scanf("%d%d", &u, &v); L[u].push_back(v); L[v].push_back(u); } if (L[1].size() == 1) Chk[1][L[1][0]] = Chk[L[1][0]][1] = true; DFS(1, 0); bool Ans = true; for (int i = 1; i <= N; i++) { if (!Ans) break; int CC = 0; for (int j = 0; j < L[i].size(); j++) { if (Chk[i][L[i][j]]) continue; CC++; } if (!(CC == 0 || CC == 2)) Ans = false; } printf("%s\n", Ans ? "Cactus" : "Not cactus"); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...