# include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 2;
int n, m, used[11][N], root, vis[N];
int tin[N], fup[N], timer;
int p[N], sz[N], siz[N], P[N], SZ[N];
long long ans;
map < pair <int, int>, bool > isb, ISB;
vector <int> g[N], gr[N], vr[N], G[N];
int get(int v){
return (p[v] == v)?v:p[v] = get(p[v]);
}
void unite(int a, int b){
a = get(a);
b = get(b);
if(a != b){
if(sz[b] > sz[a]) swap(a, b);
p[b] = a;
sz[a] += sz[b];
}
}
int f_s(int v){
return (P[v] == v)?v:P[v] = f_s(P[v]);
}
void u_s(int a, int b){
a = f_s(a);
b = f_s(b);
if(a != b){
if(SZ[a] > SZ[b]) swap(a, b);
P[b] = a;
SZ[a] += SZ[b];
}
}
void dfs(int v, int pr = 0){
used[0][v] = 1;
tin[v] = fup[v] = ++ timer;
for(int to : g[v]){
if(to == pr) continue;
if(used[0][to])
fup[v] = min(fup[v], tin[to]);
else {
dfs(to, v);
fup[v] = min(fup[v], fup[to]);
if(fup[to] > tin[v]){
isb[{v, to}] = 1;
isb[{to, v}] = 1;
}
}
}
}
void dfs1(int v){
used[1][v] = 1;
for(int to : g[v]){
if(used[1][to]) continue;
if(!isb[{v, to}])
unite(v, to);
dfs1(to);
}
}
void dfs2(int v){
used[2][v] = 1;
vr[get(v)].push_back(v);
for(int to : g[v]){
if(used[2][to]) continue;
if(get(v) != get(to)){
gr[get(v)].push_back(get(to));
gr[get(to)].push_back(get(v));
}
dfs2(to);
}
}
void dfs3(int v){
used[3][v] = 1;
siz[v] = sz[v];
for(int to : gr[v]){
if(used[3][to]) continue;
dfs3(to);
siz[v] += siz[to];
}
}
void dfs5(int v){
used[4][v] = 1;
for(int to : g[v])
if(vis[v] == vis[to] && get(v) == get(to) && !used[4][to]){
u_s(v, to);
dfs5(to);
}
}
void dfs6(int v){
used[5][v] = 1;
for(int to : g[v]){
if(used[5][to] || get(v) != get(to)) continue;
if(f_s(v) != f_s(to)){
G[f_s(v)].push_back(f_s(to));
G[f_s(to)].push_back(f_s(v));
}
dfs6(to);
}
}
void dfs7(int v){
used[6][v] = 1;
sort(G[v].begin(), G[v].end());
G[v].resize(unique(G[v].begin(), G[v].end()) - G[v].begin());
for(int to : G[v]){
if(used[6][to]) continue;
dfs7(to);
}
}
int TIN[N], FUP[N], TIMER;
void dfs8(int v, int pr = 0){
used[7][v] = 1;
TIN[v] = FUP[v] = ++ TIMER;
for(int to : G[v]){
if(to == pr) continue;
if(used[7][to])
FUP[v] = min(FUP[v], TIN[v]);
else {
dfs8(to, v);
FUP[v] = min(FUP[v], FUP[to]);
if(FUP[to] > TIN[v]){
ISB[{v, to}] = 1;
ISB[{to, v}] = 1;
}
}
}
}
void dfs9(int v){
used[8][v] = 1;
for(int to : G[v]){
if(used[8][to]) continue;
if(!ISB[{v, to}])
u_s(v, to);
dfs9(to);
}
}
int Sz, sZ[N], A[N];
void dfs10(int v, int pr = 0){
used[9][v] = 1;
if(vis[v])
Sz -= sZ[v];
for(int to : G[v]){
if(pr == to || used[9][to]) continue;
if(f_s(v) == f_s(to))
dfs10(to);
}
}
int Fup[N], Tin[N], Timer;
void dfs11(int v, int pr = 0){
used[10][v] = 1;
Fup[v] = Tin[v] = ++ Timer;
int children = 0;
for(int to : g[v]){
if(to == pr || get(v) != get(to)) continue;
if(used[10][to])
Fup[v] = min(Fup[v], Tin[to]);
else {
dfs11(to, v);
Fup[v] = min(Fup[v], Fup[to]);
if(Fup[to] >= Tin[v] && pr)
vis[v] = 1;
children ++;
}
}
if(children > 1 && !pr)
vis[v] = 1;
}
void dfs4(int v, int pr = 0){
ans += sz[v] * 1ll * (sz[v] - 1) * 1ll * (sz[v] - 2);
dfs11(v);
for(int i : vr[v])
if(!used[4][i])
dfs5(i);
dfs6(vr[v].front());
dfs7(f_s(vr[v].front()));
dfs8(f_s(vr[v].front()));
for(int i : vr[v]){
sZ[f_s(i)] = SZ[f_s(i)], A[i] = P[i];
}
dfs9(f_s(vr[v].front()));
for(int i : vr[v]){
if(!used[9][A[i]]){
Sz = SZ[f_s(i)];
dfs10(A[i]);
ans -= Sz * 1ll * ((sz[v] - SZ[f_s(i)]) * 1ll * (sz[v] - SZ[f_s(i)] - 1));
}
}
int S = 0;
vector <int> vv;
for(int i : vr[v]){
vector <int> vec;
int sum = 0;
for(int to : g[i])
if(get(to) != get(i)){
if(get(to) == pr){
sum += siz[root] - siz[v];
vec.push_back(siz[root] - siz[v]);
} else {
sum += siz[get(to)];
vec.push_back(siz[get(to)]);
}
}
for(int j : vec)
ans += j * 1ll * (sum - j);
S += sum;
vv.push_back(sum);
}
long long cur = 0;
for(int i : vv)
cur += i * 1ll * (S - i);
ans += cur * 1ll * sz[v];
long long cost = sz[v] - 1 + (sz[v] - 1) * 1ll * (sz[v] - 2);
cost *= 2;
ans += (siz[root] - siz[v]) * 1ll * cost;
for(int to : gr[v]){
if(to == pr) continue;
ans += cost * 1ll * siz[to];
dfs4(to, v);
}
}
int main(){
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; i ++){
int u, v;
scanf("%d %d", &u, &v);
g[u].push_back(v);
g[v].push_back(u);
}
for(int i = 1; i <= n; i ++)
p[i] = P[i] = i, sz[i] = SZ[i] = 1;
for(int i = 1; i <= n; i ++){
if(!used[0][i]){
dfs(i);
dfs1(i);
dfs2(i);
root = get(i);
dfs3(get(i));
dfs4(get(i));
}
}
cout << ans << endl;
}
Compilation message
count_triplets.cpp: In function 'int main()':
count_triplets.cpp:242:12: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d", &n, &m);
~~~~~^~~~~~~~~~~~~~~~~
count_triplets.cpp:246:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d", &u, &v);
~~~~~^~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
9 ms |
9740 KB |
Output is correct |
2 |
Correct |
9 ms |
9828 KB |
Output is correct |
3 |
Correct |
9 ms |
9908 KB |
Output is correct |
4 |
Correct |
9 ms |
10048 KB |
Output is correct |
5 |
Correct |
9 ms |
10048 KB |
Output is correct |
6 |
Correct |
9 ms |
10048 KB |
Output is correct |
7 |
Correct |
10 ms |
10048 KB |
Output is correct |
8 |
Correct |
9 ms |
10048 KB |
Output is correct |
9 |
Correct |
9 ms |
10048 KB |
Output is correct |
10 |
Correct |
9 ms |
10132 KB |
Output is correct |
11 |
Correct |
9 ms |
10132 KB |
Output is correct |
12 |
Correct |
9 ms |
10132 KB |
Output is correct |
13 |
Incorrect |
9 ms |
10132 KB |
Output isn't correct |
14 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
9 ms |
9740 KB |
Output is correct |
2 |
Correct |
9 ms |
9828 KB |
Output is correct |
3 |
Correct |
9 ms |
9908 KB |
Output is correct |
4 |
Correct |
9 ms |
10048 KB |
Output is correct |
5 |
Correct |
9 ms |
10048 KB |
Output is correct |
6 |
Correct |
9 ms |
10048 KB |
Output is correct |
7 |
Correct |
10 ms |
10048 KB |
Output is correct |
8 |
Correct |
9 ms |
10048 KB |
Output is correct |
9 |
Correct |
9 ms |
10048 KB |
Output is correct |
10 |
Correct |
9 ms |
10132 KB |
Output is correct |
11 |
Correct |
9 ms |
10132 KB |
Output is correct |
12 |
Correct |
9 ms |
10132 KB |
Output is correct |
13 |
Incorrect |
9 ms |
10132 KB |
Output isn't correct |
14 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
404 ms |
37452 KB |
Output is correct |
2 |
Correct |
362 ms |
37452 KB |
Output is correct |
3 |
Correct |
489 ms |
43620 KB |
Output is correct |
4 |
Correct |
410 ms |
43620 KB |
Output is correct |
5 |
Correct |
425 ms |
43620 KB |
Output is correct |
6 |
Correct |
509 ms |
43620 KB |
Output is correct |
7 |
Correct |
471 ms |
43620 KB |
Output is correct |
8 |
Correct |
460 ms |
43620 KB |
Output is correct |
9 |
Correct |
433 ms |
43620 KB |
Output is correct |
10 |
Correct |
381 ms |
43620 KB |
Output is correct |
11 |
Correct |
281 ms |
43620 KB |
Output is correct |
12 |
Correct |
346 ms |
43620 KB |
Output is correct |
13 |
Correct |
346 ms |
43620 KB |
Output is correct |
14 |
Correct |
329 ms |
43620 KB |
Output is correct |
15 |
Correct |
290 ms |
43620 KB |
Output is correct |
16 |
Correct |
232 ms |
43620 KB |
Output is correct |
17 |
Correct |
40 ms |
43620 KB |
Output is correct |
18 |
Correct |
49 ms |
43620 KB |
Output is correct |
19 |
Correct |
46 ms |
43620 KB |
Output is correct |
20 |
Correct |
49 ms |
43620 KB |
Output is correct |
21 |
Correct |
45 ms |
43620 KB |
Output is correct |
22 |
Correct |
46 ms |
43620 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
13 ms |
43620 KB |
Output is correct |
2 |
Correct |
14 ms |
43620 KB |
Output is correct |
3 |
Correct |
13 ms |
43620 KB |
Output is correct |
4 |
Correct |
12 ms |
43620 KB |
Output is correct |
5 |
Correct |
12 ms |
43620 KB |
Output is correct |
6 |
Correct |
14 ms |
43620 KB |
Output is correct |
7 |
Correct |
13 ms |
43620 KB |
Output is correct |
8 |
Correct |
14 ms |
43620 KB |
Output is correct |
9 |
Correct |
14 ms |
43620 KB |
Output is correct |
10 |
Correct |
14 ms |
43620 KB |
Output is correct |
11 |
Correct |
12 ms |
43620 KB |
Output is correct |
12 |
Correct |
12 ms |
43620 KB |
Output is correct |
13 |
Correct |
14 ms |
43620 KB |
Output is correct |
14 |
Correct |
12 ms |
43620 KB |
Output is correct |
15 |
Correct |
12 ms |
43620 KB |
Output is correct |
16 |
Correct |
12 ms |
43620 KB |
Output is correct |
17 |
Correct |
13 ms |
43620 KB |
Output is correct |
18 |
Correct |
14 ms |
43620 KB |
Output is correct |
19 |
Correct |
12 ms |
43620 KB |
Output is correct |
20 |
Correct |
13 ms |
43620 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
620 ms |
43620 KB |
Output is correct |
2 |
Correct |
503 ms |
43620 KB |
Output is correct |
3 |
Correct |
589 ms |
43620 KB |
Output is correct |
4 |
Correct |
615 ms |
43620 KB |
Output is correct |
5 |
Correct |
549 ms |
43620 KB |
Output is correct |
6 |
Correct |
674 ms |
52412 KB |
Output is correct |
7 |
Correct |
746 ms |
52412 KB |
Output is correct |
8 |
Correct |
697 ms |
52412 KB |
Output is correct |
9 |
Correct |
701 ms |
52412 KB |
Output is correct |
10 |
Correct |
642 ms |
52412 KB |
Output is correct |
11 |
Correct |
673 ms |
52412 KB |
Output is correct |
12 |
Correct |
600 ms |
52412 KB |
Output is correct |
13 |
Correct |
553 ms |
52412 KB |
Output is correct |
14 |
Correct |
459 ms |
52412 KB |
Output is correct |
15 |
Correct |
457 ms |
52412 KB |
Output is correct |
16 |
Correct |
343 ms |
52412 KB |
Output is correct |
17 |
Correct |
547 ms |
52412 KB |
Output is correct |
18 |
Correct |
553 ms |
52412 KB |
Output is correct |
19 |
Correct |
737 ms |
52412 KB |
Output is correct |
20 |
Correct |
535 ms |
52412 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
13 ms |
52412 KB |
Output is correct |
2 |
Correct |
13 ms |
52412 KB |
Output is correct |
3 |
Correct |
12 ms |
52412 KB |
Output is correct |
4 |
Correct |
11 ms |
52412 KB |
Output is correct |
5 |
Correct |
14 ms |
52412 KB |
Output is correct |
6 |
Correct |
12 ms |
52412 KB |
Output is correct |
7 |
Correct |
12 ms |
52412 KB |
Output is correct |
8 |
Correct |
11 ms |
52412 KB |
Output is correct |
9 |
Correct |
13 ms |
52412 KB |
Output is correct |
10 |
Correct |
12 ms |
52412 KB |
Output is correct |
11 |
Correct |
15 ms |
52412 KB |
Output is correct |
12 |
Correct |
13 ms |
52412 KB |
Output is correct |
13 |
Correct |
12 ms |
52412 KB |
Output is correct |
14 |
Correct |
12 ms |
52412 KB |
Output is correct |
15 |
Correct |
13 ms |
52412 KB |
Output is correct |
16 |
Correct |
11 ms |
52412 KB |
Output is correct |
17 |
Correct |
12 ms |
52412 KB |
Output is correct |
18 |
Correct |
12 ms |
52412 KB |
Output is correct |
19 |
Correct |
12 ms |
52412 KB |
Output is correct |
20 |
Correct |
13 ms |
52412 KB |
Output is correct |
21 |
Correct |
12 ms |
52412 KB |
Output is correct |
22 |
Correct |
10 ms |
52412 KB |
Output is correct |
23 |
Correct |
10 ms |
52412 KB |
Output is correct |
24 |
Correct |
11 ms |
52412 KB |
Output is correct |
25 |
Correct |
10 ms |
52412 KB |
Output is correct |
26 |
Correct |
11 ms |
52412 KB |
Output is correct |
27 |
Correct |
14 ms |
52412 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
604 ms |
52412 KB |
Output is correct |
2 |
Correct |
630 ms |
52412 KB |
Output is correct |
3 |
Correct |
550 ms |
52412 KB |
Output is correct |
4 |
Correct |
488 ms |
52412 KB |
Output is correct |
5 |
Correct |
409 ms |
52412 KB |
Output is correct |
6 |
Correct |
439 ms |
52412 KB |
Output is correct |
7 |
Correct |
295 ms |
52412 KB |
Output is correct |
8 |
Correct |
306 ms |
52412 KB |
Output is correct |
9 |
Correct |
297 ms |
52412 KB |
Output is correct |
10 |
Correct |
311 ms |
52412 KB |
Output is correct |
11 |
Correct |
311 ms |
52412 KB |
Output is correct |
12 |
Correct |
296 ms |
52412 KB |
Output is correct |
13 |
Correct |
294 ms |
52412 KB |
Output is correct |
14 |
Correct |
286 ms |
52412 KB |
Output is correct |
15 |
Correct |
527 ms |
52412 KB |
Output is correct |
16 |
Correct |
563 ms |
52412 KB |
Output is correct |
17 |
Correct |
617 ms |
52412 KB |
Output is correct |
18 |
Correct |
502 ms |
52412 KB |
Output is correct |
19 |
Correct |
463 ms |
52412 KB |
Output is correct |
20 |
Correct |
445 ms |
52412 KB |
Output is correct |
21 |
Correct |
432 ms |
52412 KB |
Output is correct |
22 |
Correct |
276 ms |
52412 KB |
Output is correct |
23 |
Correct |
245 ms |
52412 KB |
Output is correct |
24 |
Correct |
396 ms |
52412 KB |
Output is correct |
25 |
Correct |
375 ms |
52412 KB |
Output is correct |
26 |
Correct |
486 ms |
52412 KB |
Output is correct |
27 |
Correct |
456 ms |
52412 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
9 ms |
9740 KB |
Output is correct |
2 |
Correct |
9 ms |
9828 KB |
Output is correct |
3 |
Correct |
9 ms |
9908 KB |
Output is correct |
4 |
Correct |
9 ms |
10048 KB |
Output is correct |
5 |
Correct |
9 ms |
10048 KB |
Output is correct |
6 |
Correct |
9 ms |
10048 KB |
Output is correct |
7 |
Correct |
10 ms |
10048 KB |
Output is correct |
8 |
Correct |
9 ms |
10048 KB |
Output is correct |
9 |
Correct |
9 ms |
10048 KB |
Output is correct |
10 |
Correct |
9 ms |
10132 KB |
Output is correct |
11 |
Correct |
9 ms |
10132 KB |
Output is correct |
12 |
Correct |
9 ms |
10132 KB |
Output is correct |
13 |
Incorrect |
9 ms |
10132 KB |
Output isn't correct |
14 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
9 ms |
9740 KB |
Output is correct |
2 |
Correct |
9 ms |
9828 KB |
Output is correct |
3 |
Correct |
9 ms |
9908 KB |
Output is correct |
4 |
Correct |
9 ms |
10048 KB |
Output is correct |
5 |
Correct |
9 ms |
10048 KB |
Output is correct |
6 |
Correct |
9 ms |
10048 KB |
Output is correct |
7 |
Correct |
10 ms |
10048 KB |
Output is correct |
8 |
Correct |
9 ms |
10048 KB |
Output is correct |
9 |
Correct |
9 ms |
10048 KB |
Output is correct |
10 |
Correct |
9 ms |
10132 KB |
Output is correct |
11 |
Correct |
9 ms |
10132 KB |
Output is correct |
12 |
Correct |
9 ms |
10132 KB |
Output is correct |
13 |
Incorrect |
9 ms |
10132 KB |
Output isn't correct |
14 |
Halted |
0 ms |
0 KB |
- |