Submission #64924

#TimeUsernameProblemLanguageResultExecution timeMemory
64924gusfring철인 이종 경기 (APIO18_duathlon)C++14
23 / 100
1193 ms865736 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e5 + 5;
typedef long long ll;
int sz[MAXN], N, M, vis[MAXN], S;
ll res;
vector<int> adj[MAXN];

void dfs(int u, int p){
	vis[u] = 1, sz[u] = 1;
	for(int v : adj[u])
		if(v != p){ dfs(v, u); sz[u] += sz[v]; }
}

void solve(int u, int p){
	vector<int> vec;
	if(p != -1) vec.push_back(S - sz[u]);
	for(int v : adj[u])
		if(v != p){
			vec.push_back(sz[v]);
			solve(v, u);
		}
	int sum = 0;
	for(int x : vec){
		res += 1LL * sum * x;
		sum += x;
	}
}

int main(){
	scanf("%d %d", &N, &M);
	while(M--){
		int u, v;
		scanf("%d %d", &u, &v);
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
	for(int i=1; i<=N; ++i)
		if(!vis[i]){
			dfs(i, -1);
			S = sz[i];
			solve(i, -1);
		}
	printf("%lld\n", 2 * res);
	return 0;
}

Compilation message (stderr)

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