Submission #221437

#TimeUsernameProblemLanguageResultExecution timeMemory
221437bensonlzl전압 (JOI14_voltage)C++14
100 / 100
160 ms19192 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> pi; vector<pi> AdjList[100005]; int colour[100005], visit[100005], depth[100005]; int badup[100005], goodup[100005]; int badlow[100005], goodlow[100005]; int badlep[100005], goodlep[100005]; int baduep[100005], gooduep[100005]; int par[100005]; int N, M, A, B; int total_bad = 0; int usable = 0; void dfs(int x, int p){ par[x] = p; //cout << x << ' ' << p << '\n'; visit[x] = 1; for (auto it : AdjList[x]){ int v = it.first, e = it.second; if (e == p) continue; if (visit[v]){ if (depth[x] > depth[v]){ if (colour[x] == colour[v]){ badlep[x]++; badup[x]++; baduep[v]++; total_bad++; } else{ goodlep[x]++; goodup[x]++; gooduep[v]++; } } } else{ depth[v] = depth[x] + 1; colour[v] = 1 - colour[x]; dfs(v,e); badup[x] += badup[v]; goodup[x] += goodup[v]; } } badup[x] -= baduep[x]; goodup[x] -= gooduep[x]; } void check_vertex(int x, int p){ visit[x] = 1; //cout << "CHECKING " << x << ' ' << p << '\n'; if (p != -1){ if (total_bad == badup[x]){ if (goodup[x] == 0){ usable++; //cout << p << " CASE 1A\n"; } } } for (auto it : AdjList[x]){ int v = it.first, e = it.second; if (p == e) continue; if (par[v] == e){ check_vertex(v,e); } else{ if (depth[x] < depth[v]) continue; if (total_bad == 1 && colour[v] == colour[x]){ usable++; //cout << "CASE 2A\n"; } } } //cout << "ENDING " << x << ' ' << p << '\n'; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin >> N >> M; for (int i = 1; i <= M; ++i){ cin >> A >> B; AdjList[A].push_back(pi(B,i)); AdjList[B].push_back(pi(A,i)); } for (int i = 1; i <= N; ++i){ if (!visit[i]){ depth[i] = 0; colour[i] = 0; dfs(i,-1); } } for (int i = 1; i <= N; ++i){ visit[i] = 0; } for (int i = 1; i <= N; ++i){ if (!visit[i]){ check_vertex(i,-1); } } /* for (int i = 1; i <= N; ++i){ cout << badup[i] << ' ' << goodup[i] << '\n'; } */ cout << usable << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...