Skip to content

Commit 7b0c25e

Browse files
committed
atcoder/abc157D
1 parent a2acb5b commit 7b0c25e

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

atcoder/abc157/D/main.cpp

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
using ll = int64_t;
5+
using ff = long double;
6+
7+
int N, M, K;
8+
vector<vector<int>> G;
9+
vector<set<int>> E;
10+
11+
vector<bool> done;
12+
void dfs(int v, set<int>& cc) {
13+
if (done[v]) return;
14+
done[v] = true;
15+
cc.insert(v);
16+
for (int u : G[v]) {
17+
if (done[u]) continue;
18+
dfs(u, cc);
19+
}
20+
}
21+
22+
vector<int> solve() {
23+
done.assign(N, false);
24+
vector<int> gr(N, -1);
25+
vector<set<int>> ccs;
26+
for (int v = 0; v < N; ++v) {
27+
if (done[v]) continue;
28+
set<int> cc;
29+
dfs(v, cc);
30+
for (int u : cc) {
31+
gr[u] = ccs.size();
32+
}
33+
ccs.push_back(cc);
34+
}
35+
for (int v = 0; v < N; ++v) {
36+
auto ns = E[v];
37+
for (int u : E[v]) {
38+
if (gr[v] != gr[u]) {
39+
ns.erase(u);
40+
}
41+
}
42+
E[v] = ns;
43+
}
44+
vector<int> ans(N, 0);
45+
for (int v = 0; v < N; ++v) {
46+
ans[v] = (ccs[gr[v]].size() - 1) - G[v].size() - E[v].size();
47+
}
48+
return ans;
49+
}
50+
51+
int main() {
52+
ios_base::sync_with_stdio(false);
53+
cin.tie(0); cout.tie(0);
54+
55+
cin >> N >> M >> K;
56+
G.assign(N, vector<int>());
57+
E.assign(N, set<int>());
58+
for (int i = 0; i < M; ++i) {
59+
int u, v;
60+
cin >> u >> v;
61+
--u, --v;
62+
G[u].push_back(v);
63+
G[v].push_back(u);
64+
}
65+
for (int i = 0; i < K; ++i) {
66+
int u, v;
67+
cin >> u >> v;
68+
--u, --v;
69+
E[u].insert(v);
70+
E[v].insert(u);
71+
}
72+
73+
auto ans = solve();
74+
for (int i = 0; i < N; ++i) {
75+
if (i > 0) cout << " ";
76+
cout << ans[i];
77+
}
78+
cout << endl;
79+
80+
return 0;
81+
}

0 commit comments

Comments
 (0)