Submission #203731

#TimeUsernameProblemLanguageResultExecution timeMemory
203731SegtreeDuathlon (APIO18_duathlon)C++14
23 / 100
168 ms13944 KiB
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> P;
#define rep(i,n) for(int i=0;i<n;i++)
#define chmin(a,b) a=min(a,b)
#define chmax(a,b) a=max(a,b)
#define N 100010
ll n,m;
vector<ll> g[N];
bool vis[N];
ll res,vcnt;
ll dp1[N],dp2[N];
void dfs(ll x){
	vis[x]=1; vcnt++;
	ll v1=1,v2=0;
	for(auto y:g[x])if(vis[y]==0){
		dfs(y);
		res+=v1*dp2[y]+v2*dp1[y];
		v1+=dp1[y],v2+=dp2[y];
	}
	dp1[x]=v1;
	dp2[x]=v2+v1;
}
int main(){
	ll n,m; cin>>n>>m;
	rep(i,m){
		ll a,b; cin>>a>>b;
		a--,b--;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	ll ans=0;
	rep(i,n)vis[i]=0;
	rep(i,n){
		if(vis[i]==0){
			res=vcnt=0;
			dfs(i);
			res-=vcnt*(vcnt-1)/2;
			res*=2;
			if(res>0)ans+=res;
		}
	}
	cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...