File tree 1 file changed +81
-0
lines changed 1 file changed +81
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments