제출 #103703

#제출 시각아이디문제언어결과실행 시간메모리
103703autumn_eel철인 이종 경기 (APIO18_duathlon)C++14
23 / 100
151 ms12104 KiB
#include <bits/stdc++.h>
#define rep(i,n)for(int i=0;i<(n);i++)
using namespace std;
typedef long long ll;

int n,m;
vector<int>E[200000];
int sz[200000];
bool used1[200000],used2[200000];
ll ans=0;
int cnt=0;

void dfs1(int v){
	cnt++;
	used1[v]=true;
	for(int u:E[v]){
		if(used1[u])continue;
		dfs1(u);
	}
}
void dfs2(int v,int p){
	used2[v]=true;
	int s=cnt-1;
	sz[v]=1;
	for(int u:E[v]){
		if(used2[u])continue;
		dfs2(u,v);
		sz[v]+=sz[u];
		s-=sz[u];
		ans+=sz[u]*(ll)(cnt-sz[u]-1);
	}
	ans+=s*(ll)(cnt-s-1);
}
int main(){
	scanf("%d%d",&n,&m);
	assert(m<=n-1);
	rep(i,m){
		int a,b;scanf("%d%d",&a,&b);a--;b--;
		E[a].push_back(b);
		E[b].push_back(a);
	}
	rep(i,n){
		if(!used1[i]){
			cnt=0;
			dfs1(i);
			dfs2(i,-1);
		}
	}
	cout<<ans<<endl;
}

컴파일 시 표준 에러 (stderr) 메시지

count_triplets.cpp: In function 'int main()':
count_triplets.cpp:35:7: 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:38:16: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int a,b;scanf("%d%d",&a,&b);a--;b--;
           ~~~~~^~~~~~~~~~~~~~
#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...