Submission #732793

# Submission time Handle Problem Language Result Execution time Memory
732793 2023-04-29T10:00:14 Z sentheta Duathlon (APIO18_duathlon) C++17
0 / 100
107 ms 21940 KB
// author : sentheta aka vanwij
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<cassert>
#include<random>
#include<chrono>
#include<cmath>
#include<string>
#include<vector>
#include<bitset>
#include<queue>
#include<stack>
#include<map>
#include<set>
using namespace std;

#define Int long long
#define V vector
#define pii pair<int,int>
#define ff first
#define ss second

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

#define pow2(x) (1LL<<(x))
#define msb(x) (63-__builtin_clzll(x))
#define bitcnt(x) (__builtin_popcountll(x))

#define nl '\n'
#define _ << ' ' <<
#define all(x) (x).begin(), (x).end()
#define rep(i,a,b) for(int i = (int)(a); i < (int)(b); i++)
#define dbg(x) if(0) cout << "?" << #x << " : " << (x) << endl << flush;

#define int long long
// const Int MOD = 1e9+7;
const Int MOD = 998244353;
Int bpow(Int a,Int b){
	Int ret = 1;
	for(;b; a=a*a%MOD,b/=2) if(b&1) ret = ret*a%MOD;
	return ret;
}
Int inv(Int a){return bpow(a,MOD-2);}

void solve(); int TC, ALLTC;
signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	srand(chrono::steady_clock::now().time_since_epoch().count());
	cout << fixed << setprecision(7);
	// cin >> ALLTC; for(TC=1; TC<=ALLTC; TC++) solve(); return 0;
	solve();
}





const int N = 1e5+5;
const int M = 2e5+5;
Int C2(Int x){
	return x/1 *(x-1)/2;
}
Int C3(Int x){
	return x/1 *(x-1)/2 *(x-2)/3;
}

int n, m;
pii edg[M];
V<int> adj[N];

bool bg[M];
int t[N], up[N], tim=0;
void dfs_bridge(int x=1,int par=-1){
	up[x] = t[x] = ++tim;

	for(int e : adj[x]){
		int y = edg[e].ff^edg[e].ss^x;
		if(y==par) continue;

		if(t[y]==-1){
			dfs_bridge(y, x);
		}
		up[x] = min(up[x],up[y]);

		if(up[y] > t[x]){
			bg[e] = 1;
			// cout << x _ y << nl;
		}
	}
}

int sz[N];
struct Dsu{
	int p[N];
	Dsu(){
		rep(i,0,N) p[i]=i, sz[i]=1;
	}
	int find(int x){
		return p[x]==x ? x : p[x]=find(p[x]);
	}
	void unite(int x,int y){
		if((x=find(x))==(y=find(y))) return;
		p[y] = x;
		sz[x] += sz[y];
	}
} dsu;

V<int> cadj[N];
int ans = 0;

void dfs_dp(int x,int par=-1){
	int orisz = sz[x];
	for(int y : cadj[x]) if(y!=par){
		dfs_dp(y, x);
		sz[x] += sz[y];
	}

	dbg(x);
	dbg(orisz);
	dbg(sz[x]);

	// S,C,T in this component
	ans += orisz *(orisz-1) *(orisz-2);
	dbg(orisz *(orisz-1) *(orisz-2));

	// S,C in this component
	// C,T in this component
	ans += 2 *(orisz-1) *(orisz-1) *(n-orisz);
	dbg(2 *(orisz-1) *(orisz-1) *(n-orisz));

	// C is LCA
	// C in this component, S from a child, T from other child
	for(int y : cadj[x]) if(y!=par){
		ans += orisz *sz[y] *(sz[x]-1-sz[y]);
		dbg(orisz *sz[y] *(sz[x]-1-sz[y]));
	}

	// C is not LCA
	// C in this component, S from a child, T from parent
	// C in this component, T from a child, C from parent
	ans += 2 *orisz *(sz[x]-orisz) *(n-sz[x]);
	dbg(2 *orisz *(sz[x]-orisz) *(n-sz[x]));

	dbg(ans);
	// cout << nl;
}

void solve(){
	
	cin >> n >> m;
	
	rep(e,1,m+1){
		int u, v;
		cin >> u >> v;

		edg[e] = {u,v};
		adj[u].push_back(e);
		adj[v].push_back(e);
	}
	

	rep(i,1,n+1) t[i] = -1;
	dfs_bridge();

	rep(e,1,m+1) if(!bg[e]){
		auto[x,y] = edg[e];
		dsu.unite(x,y);
	}
	rep(e,1,m+1) if(bg[e]){
		auto[x,y] = edg[e];
		x = dsu.find(x);
		y = dsu.find(y);

		cadj[x].push_back(y);
		cadj[y].push_back(x);
	}

	dfs_dp(dsu.find(1));
	cout << ans << nl;
}
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 6612 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 6612 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 83 ms 21912 KB Output is correct
2 Correct 101 ms 21940 KB Output is correct
3 Incorrect 64 ms 17880 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6612 KB Output is correct
2 Correct 4 ms 6612 KB Output is correct
3 Correct 4 ms 6612 KB Output is correct
4 Correct 5 ms 6740 KB Output is correct
5 Correct 5 ms 6736 KB Output is correct
6 Correct 4 ms 6740 KB Output is correct
7 Correct 4 ms 6736 KB Output is correct
8 Correct 4 ms 6740 KB Output is correct
9 Correct 4 ms 6736 KB Output is correct
10 Incorrect 4 ms 6612 KB Output isn't correct
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 73 ms 18540 KB Output is correct
2 Correct 92 ms 18524 KB Output is correct
3 Correct 105 ms 18512 KB Output is correct
4 Correct 95 ms 18452 KB Output is correct
5 Correct 86 ms 18460 KB Output is correct
6 Correct 107 ms 21480 KB Output is correct
7 Correct 105 ms 21076 KB Output is correct
8 Correct 97 ms 20332 KB Output is correct
9 Correct 102 ms 19680 KB Output is correct
10 Incorrect 79 ms 16824 KB Output isn't correct
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 6612 KB Output is correct
2 Correct 4 ms 6604 KB Output is correct
3 Incorrect 5 ms 6616 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 78 ms 18448 KB Output is correct
2 Correct 100 ms 18272 KB Output is correct
3 Incorrect 83 ms 17800 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 6612 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 6612 KB Output isn't correct
2 Halted 0 ms 0 KB -