답안 #1006306

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1006306 2024-06-23T17:45:18 Z amirhoseinfar1385 철인 이종 경기 (APIO18_duathlon) C++17
0 / 100
46 ms 23244 KB
#include<bits/stdc++.h>
using namespace std;
const long long maxn=100000+10;
vector<long long>adj[maxn];
vector<long long>allp;
long long n,m,isb[maxn],high[maxn],vis[maxn];
struct dsu{
	int par[maxn],wa[maxn];
	dsu(){
		for(int i=0;i<maxn;i++){
			par[i]=i;
			wa[i]=0;
		}
	}
	int root(int u){
		if(u==par[u]){
			return u;
		}
		return par[u]=root(par[u]);
	}
	void con(int u,int v){
		int rootu=root(u),rootv=root(v);
		if(rootu!=rootv){
			par[rootv]=rootu;
			wa[rootu]+=wa[rootv];
		}
	}
}ds;

void vorod(){
	cin>>n>>m;
	for(long long i=0;i<m;i++){
		long long u,v;
		cin>>u>>v;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
}

long long dfspre(long long u=1){
	long long ret=high[u];
	vis[u]=1;
	for(auto x:adj[u]){
		if(high[x]!=0){
			ret=min(ret,high[x]);
		}
	}
	long long f=0,ted=0;
	for(auto x:adj[u]){
		if(vis[x]){
			continue;
		}
		ted++;
		high[x]=high[u]+1;
		long long z=dfspre(x);
		if(z>=high[u]){
			f=1;
		}
		ret=min(ret,z);
	}
	if(u!=1){
		isb[u]=f;
		if(f){
			allp.push_back(u);
		}
	}else{
		if(ted>1){
			isb[u]=1;
			allp.push_back(u);
		}
	}
	return ret;

}

void pre(){
	high[1]=1;
	dfspre(1);
	vector<pair<long long,long long>>alle;
	for(long long i=1;i<=n;i++){
		for(auto x:adj[i]){
			alle.push_back(make_pair(i,x));
		}
		adj[i].clear();
		if(isb[i]==0){
			ds.wa[i]=1;
		}
	}
	for(auto x:alle){
		if(isb[x.first]+isb[x.second]==0){
			ds.con(x.first,x.second);
		}
	}
	for(auto x:alle){
		if(isb[x.first]+isb[x.second]>0){
			long long fu=ds.root(x.first);
			long long fv=ds.root(x.second);
			adj[fu].push_back(fv);
		}
	}
	for(long long i=1;i<=n;i++){
		vis[i]=0;
	}
}
long long mainres=0;

pair<long long,long long> dfssolve(long long u,long long wa){
	pair<long long,long long>ret;
	//cout<<u<<" "<<wa<<endl;
	ret.second=ret.first=ds.wa[u];
	if(isb[u]==1){
		ret.first=ret.second=1;
	}
	vis[u]=1;
	for(auto x:adj[u]){
		if(vis[x]==0){
			pair<long long,long long>fake=dfssolve(x,ret.first);
			//cout<<"go: "<<u<<" "<<x<<" "<<isb[u]<<" "<<ds.wa[u]<<" "<<fake.first<<" "<<fake.second<<endl;
			ret.second+=fake.second;
			if(isb[u]==1){
				mainres-=fake.first*((n-fake.second)*(n-fake.second-1));
			}
		}
	}
	if(isb[u]==1){
		mainres-=wa*ret.second*(ret.second-1);
	}	
	return ret;
}

void solve(){
	mainres=1ll*n*(n-1)*(n-2);
	dfssolve(1,0);
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	//cout.tie(0);
	//freopen("inp.txt","r",stdin);
	vorod();
	pre();
	solve();
	cout<<mainres<<"\n";
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 5976 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 5976 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 38 ms 23244 KB Output is correct
2 Correct 37 ms 22988 KB Output is correct
3 Incorrect 31 ms 18372 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 5980 KB Output is correct
2 Correct 1 ms 5980 KB Output is correct
3 Correct 1 ms 5980 KB Output is correct
4 Correct 2 ms 5980 KB Output is correct
5 Correct 1 ms 5980 KB Output is correct
6 Correct 1 ms 5980 KB Output is correct
7 Correct 2 ms 5980 KB Output is correct
8 Correct 2 ms 5980 KB Output is correct
9 Correct 1 ms 5980 KB Output is correct
10 Incorrect 1 ms 5980 KB Output isn't correct
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 45 ms 17420 KB Output is correct
2 Correct 46 ms 17476 KB Output is correct
3 Correct 36 ms 16720 KB Output is correct
4 Correct 34 ms 16776 KB Output is correct
5 Correct 33 ms 16244 KB Output is correct
6 Correct 39 ms 20296 KB Output is correct
7 Correct 37 ms 20080 KB Output is correct
8 Correct 38 ms 19528 KB Output is correct
9 Correct 37 ms 17304 KB Output is correct
10 Incorrect 33 ms 16896 KB Output isn't correct
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 5980 KB Output is correct
2 Correct 2 ms 5940 KB Output is correct
3 Incorrect 2 ms 5948 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 36 ms 16712 KB Output is correct
2 Correct 39 ms 15684 KB Output is correct
3 Incorrect 46 ms 16968 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 5976 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 5976 KB Output isn't correct
2 Halted 0 ms 0 KB -