Skip to content

Commit f8ad538

Browse files
Add files via upload
1 parent 0d539bc commit f8ad538

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#pragma GCC optimize("Ofast")
2+
#pragma GCC optimize("unroll-loops")
3+
#include <bits/stdc++.h>
4+
using namespace std;
5+
6+
int n, e, e2;
7+
vector<vector<int>> adjlist;
8+
vector<vector<int>> adjlistg;
9+
vector<int> colour;
10+
11+
void dfs(int u, int col){
12+
colour[u] = col;
13+
for (int v : adjlistg[u]){
14+
if (colour[v] == -1){
15+
dfs(v, col);
16+
}
17+
}
18+
}
19+
20+
vector<int> colour2;
21+
void dfs2(int u, int col){
22+
colour2[u] = col;
23+
for (int v : adjlist[u]){
24+
if (colour2[v] == -1){
25+
dfs2(v, col);
26+
}
27+
}
28+
}
29+
30+
int main(){
31+
int tc;
32+
cin >> tc;
33+
while(tc--){
34+
cin >> n >> e >> e2;
35+
adjlist.assign(n, vector<int>());
36+
adjlistg.assign(n, vector<int>());
37+
colour.assign(n, -1);
38+
39+
vector<pair<int, int>> el(e);
40+
for (int i=0; i<e; i++){
41+
int a, b;
42+
cin >> a >> b;
43+
a--; b--;
44+
el[i] = {a, b};
45+
}
46+
47+
for (int i=0; i<e2; i++){
48+
int a, b;
49+
cin >> a >> b;
50+
a--; b--;
51+
adjlistg[a].push_back(b);
52+
adjlistg[b].push_back(a);
53+
}
54+
55+
56+
// colour nodes based on G
57+
int col = 0;
58+
for (int i=0; i<n; i++){
59+
if (colour[i] == -1){
60+
dfs(i, col);
61+
col++;
62+
}
63+
}
64+
65+
// remove edges across colours in F
66+
// vector<pair<int, int>> reducedel;
67+
int ans = 0;
68+
for (auto [a, b] : el){
69+
if (colour[a] == colour[b]){
70+
adjlist[a].push_back(b);
71+
adjlist[b].push_back(a);
72+
}
73+
else{
74+
ans++;
75+
}
76+
}
77+
78+
// colour nodes based on F
79+
colour2.assign(n, -1);
80+
int col2 = 0;
81+
for (int i=0; i<n; i++){
82+
if (colour2[i] == -1){
83+
dfs2(i, col2);
84+
col2++;
85+
}
86+
}
87+
88+
ans += col2 - col;
89+
cout << ans << endl;
90+
}
91+
92+
return 0;
93+
}

0 commit comments

Comments
 (0)