답안 #982302

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
982302 2024-05-14T06:11:27 Z Faisal_Saqib 철인 이종 경기 (APIO18_duathlon) C++17
31 / 100
711 ms 1048576 KB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
const int N=1e5+10;
vector<int> ma[N];
// ll pre[N];
bool vis[N];
ll ans=0,sz[N],dp[N],dp_[N];
void dfs(int x,int p=-1)
{
	sz[x]=1;
	vis[x]=1;
	for(auto y:ma[x])
	{
		if(y!=p)
		{
			dfs(y,x);
			sz[x]+=sz[y];
			dp[x]-=(sz[y]*sz[y]);
		}
	}
	dp[x]+=((sz[x]-1)*(sz[x]-1));
}
void ChangeRoot(int x,int y)
{
	// 
	dp[x]+=(sz[y]*sz[y]);
	dp[x]-=((sz[x]-1)*(sz[x]-1));
	dp[y]-=((sz[y]-1)*(sz[y]-1));
	sz[x]-=sz[y];
	sz[y]+=sz[x];
	dp[x]+=((sz[x]-1)*(sz[x]-1));
	dp[y]+=((sz[y]-1)*(sz[y]-1));
	dp[y]-=(sz[x]*sz[x]);
}
void dfs_(int x,int p=-1)
{
	vis[x]=1;
	ans+=dp[x];
	for(auto y:ma[x])
	{
		if(y!=p)
		{			
			ChangeRoot(x,y);
			dfs_(y,x);
			ChangeRoot(y,x);
		}
	}
}
bool cycle=0;
int nodes=0;
void _dfs(int x,int p=-1)
{
	vis[x]=1;
	nodes++;
	for(auto y:ma[x])
	{
		if(y!=p)
		{
			if(vis[y])
			{
				cycle=1;
			}
			else
			{
				_dfs(y,x);
			}
		}
	}
}
int f_cyc(int x)
{
	return (x*(x-1)*(x-2));
}
// int f_lin(int x)
// {
// 	ll cur=(x-1)*(x-1)*(x-1);
// 	return cur-(pre[x-1]);
// }
int f_lin_brute(int x)
{
	ll ans=0;
	ll sp=(x-1)*(x-1);
	for(int j=1;j<=x;j++)
		ans+=(sp-((j-1)*(j-1))-((x-j)*(x-j)));
	return ans;
}
void solve()
{
	// int n,m;
	// cin>>n;
	// // m=n-1;
	int n,m;
	cin>>n>>m;
	vector<int> deg(n+2);
	for(int i=0;i<m;i++)
	{
		int x=i+1,y=i+2;
		cin>>x>>y;
		deg[x]++;
		deg[y]++;
		ma[x].push_back(y);
		ma[y].push_back(x);
	}
	int mx=0;
	for(int i=1;i<=n;i++)
		mx=max(mx,deg[i]);
	if(mx<=2)
	{
		// Solve a Cycle or a Path
		for(int i=1;i<=n;i++)
		{
			if(!vis[i])
			{
				cycle=0;
				nodes=0;
				_dfs(i);
				if(cycle)
				{
					ans+=f_cyc(nodes);
				}
				else
				{
					ans+=f_lin_brute(nodes);
				}
			}
		}
	}
	else
	{
		// Solve on Tree	
		for(int i=1;i<=n;i++)
		{
			if(!vis[i])
			{
				dfs(i);
			}
		}
		for(int i=1;i<=n;i++)
			vis[i]=0;
		for(int i=1;i<=n;i++)
		{
			if(!vis[i])
			{
				dfs_(i);
			}
		}
	}
	// cout<<"Hola amigo "<<f_lin(n)<<endl;
	// cout<<f_lin_brute(n)<<endl;
	cout<<ans<<endl;
}
signed main()
{
  cin.tie(0);
  cout.tie(0);
  ios::sync_with_stdio(0);
  // pre[0]=0;
  // ll asp=1e5+1;
  // for(int i=1;i<=asp;i++)
  // 	pre[i]=pre[i-1]+(i*i);
  solve();
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 596 ms 1048576 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 596 ms 1048576 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 36 ms 11624 KB Output is correct
2 Correct 46 ms 11548 KB Output is correct
3 Correct 39 ms 9044 KB Output is correct
4 Correct 34 ms 10324 KB Output is correct
5 Correct 35 ms 8504 KB Output is correct
6 Correct 31 ms 8272 KB Output is correct
7 Correct 39 ms 7876 KB Output is correct
8 Correct 27 ms 8028 KB Output is correct
9 Correct 28 ms 7260 KB Output is correct
10 Correct 27 ms 7696 KB Output is correct
11 Correct 23 ms 6748 KB Output is correct
12 Correct 36 ms 6868 KB Output is correct
13 Correct 21 ms 6748 KB Output is correct
14 Correct 20 ms 6488 KB Output is correct
15 Correct 15 ms 6232 KB Output is correct
16 Correct 22 ms 6236 KB Output is correct
17 Correct 2 ms 3676 KB Output is correct
18 Correct 2 ms 3676 KB Output is correct
19 Correct 2 ms 3676 KB Output is correct
20 Correct 2 ms 3676 KB Output is correct
21 Correct 2 ms 3676 KB Output is correct
22 Correct 2 ms 3676 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4956 KB Output is correct
2 Correct 1 ms 5112 KB Output is correct
3 Correct 2 ms 4956 KB Output is correct
4 Correct 1 ms 2908 KB Output is correct
5 Correct 2 ms 5376 KB Output is correct
6 Correct 2 ms 4956 KB Output is correct
7 Correct 1 ms 2908 KB Output is correct
8 Correct 1 ms 4956 KB Output is correct
9 Correct 2 ms 4956 KB Output is correct
10 Correct 1 ms 4952 KB Output is correct
11 Correct 1 ms 4956 KB Output is correct
12 Correct 1 ms 4956 KB Output is correct
13 Correct 1 ms 4956 KB Output is correct
14 Correct 2 ms 4956 KB Output is correct
15 Correct 1 ms 4956 KB Output is correct
16 Correct 1 ms 4956 KB Output is correct
17 Correct 1 ms 4956 KB Output is correct
18 Correct 1 ms 4956 KB Output is correct
19 Correct 1 ms 4956 KB Output is correct
20 Correct 1 ms 4956 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 42 ms 9568 KB Output is correct
2 Correct 41 ms 9552 KB Output is correct
3 Correct 33 ms 9564 KB Output is correct
4 Correct 35 ms 9544 KB Output is correct
5 Correct 34 ms 9560 KB Output is correct
6 Correct 28 ms 9304 KB Output is correct
7 Correct 35 ms 12380 KB Output is correct
8 Correct 34 ms 11612 KB Output is correct
9 Correct 45 ms 10832 KB Output is correct
10 Correct 39 ms 9552 KB Output is correct
11 Correct 45 ms 9556 KB Output is correct
12 Correct 35 ms 9564 KB Output is correct
13 Correct 31 ms 9376 KB Output is correct
14 Correct 28 ms 9308 KB Output is correct
15 Correct 24 ms 9076 KB Output is correct
16 Correct 16 ms 8284 KB Output is correct
17 Correct 25 ms 9680 KB Output is correct
18 Correct 24 ms 9536 KB Output is correct
19 Correct 27 ms 9672 KB Output is correct
20 Correct 31 ms 9556 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4956 KB Output is correct
2 Correct 1 ms 4960 KB Output is correct
3 Runtime error 617 ms 1048576 KB Execution killed with signal 9
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 9564 KB Output is correct
2 Correct 46 ms 9344 KB Output is correct
3 Runtime error 711 ms 1048576 KB Execution killed with signal 9
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 596 ms 1048576 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 596 ms 1048576 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -