Submission #156145

#TimeUsernameProblemLanguageResultExecution timeMemory
156145Flying_dragon_02전압 (JOI14_voltage)C++14
100 / 100
242 ms18028 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define mp make_pair typedef pair<int, int> ii; const int mod = 1e9 + 7; const int inf = 1e9; int add(int x, int y) { return (1ll * x + 1ll * y) % mod; } int del(int x, int y) { return ((1ll * x - 1ll * y) % mod + mod) % mod; } int mul(int x, int y) { return (1ll * x * 1ll * y) % mod; } const int N = 2e5 + 5; int n, m, bad[N], badEdge, ans, parity[N], dist[N], low[N]; vector<ii> graph[N]; bool vis[N], used[N]; int cnt; void dfs(int u, int p) { dist[u] = low[u] = ++cnt; parity[u] = parity[p] ^ 1; for(int i = 0; i < graph[u].size(); i++) { int v = graph[u][i].fi, id = graph[u][i].se; if(used[id]) continue; used[id] = 1; if(!dist[v]) { dfs(v, u); bad[u] += bad[v]; low[u] = min(low[u], low[v]); } else { if(parity[v] == parity[u]) { if(dist[v] < dist[u]) { bad[v]--; bad[u]++; badEdge++; } } else low[u] = min(low[u], dist[v]); } } } void bfs(int u, int p) { vis[u] = 1; for(int i = 0; i < graph[u].size(); i++) { int v = graph[u][i].fi; if(v == p) continue; if(!vis[v]) { bfs(v, u); //cout << u << " " << v << " " << low[v] << " " << dist[u] << "\n"; if(bad[v] == badEdge && low[v] > dist[u]) ans++; } } } int main() { cin.tie(0), ios_base::sync_with_stdio(0); cin >> n >> m; for(int i = 1; i <= m; i++) { int u, v; cin >> u >> v; graph[u].pb({v, i}); graph[v].pb({u, i}); } for(int i = 1; i <= n; i++) { if(!dist[i]) dfs(i, i); } if(badEdge == 1) ans++; memset(vis, 0, sizeof(vis)); for(int i = 1; i <= n; i++) { if(!vis[i]) bfs(i, i); } cout << ans; }

Compilation message (stderr)

voltage.cpp: In function 'void dfs(int, int)':
voltage.cpp:41:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < graph[u].size(); i++) {
                    ~~^~~~~~~~~~~~~~~~~
voltage.cpp: In function 'void bfs(int, int)':
voltage.cpp:66:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < graph[u].size(); i++) {
                    ~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...