답안 #135032

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
135032 2019-07-23T14:39:56 Z Lawliet 철인 이종 경기 (APIO18_duathlon) C++14
23 / 100
1000 ms 1048580 KB
#include <bits/stdc++.h>

#define MAX 100010

using namespace std;
typedef long long int lli;

int n, m;
int n1, n2;

int sub[MAX];
int prof[MAX];

lli ans;

lli sumProf[MAX];
lli ansRoot[MAX];

bool marc[MAX];

vector<int> grafo[MAX];

void DFSCalculate(int i, int p, int depth)
{
	sub[i] = 1;
	marc[i] = true;

	sumProf[i] = depth;

	for(int g = 0 ; g < grafo[i].size() ; g++)
	{
		int prox = grafo[i][g];

		if(prox == p) continue;

		DFSCalculate(prox , i , depth + 1);

		sub[i] += sub[prox];//SOMA ATÉ RAIZ
		sumProf[i] += sumProf[prox];
	}
}

void DFSRotate(int i, int p)
{
	ansRoot[i] = sumProf[i];

	for(int g = 0 ; g < grafo[i].size() ; g++)
	{
		int prox = grafo[i][g];

		if(prox == p) continue;

		int lastSubI = sub[i];
		int lastSubProx = sub[prox];

		lli lastSumI = sumProf[i];
		lli lastSumProx = sumProf[prox];

		sub[i] -= sub[prox];
		sumProf[i] -= sumProf[prox];

		sumProf[prox] += sumProf[i] + sub[i] - sub[prox];
		sub[prox] += sub[i];

		DFSRotate(prox , i);

		sub[i] = lastSubI;
		sub[prox] = lastSubProx;

		sumProf[i] = lastSumI;
		sumProf[prox] = lastSumProx;
	}
}

int main()
{
	scanf("%d %d",&n,&m);

	for(int g = 0 ; g < m ; g++)
	{
		scanf("%d %d",&n1,&n2);

		grafo[n1].push_back(n2);
		grafo[n2].push_back(n1);
	}

	for(int g = 1 ; g <= n ; g++)
	{
		if(marc[g]) continue;

		DFSCalculate(g , g , 0);
		DFSRotate(g , g);

		lli p = sub[g];
		p *= sub[g] - 1;

		ans -= p;
	}

	for(int g = 1 ; g <= n ; g++)
		ans += ansRoot[g];

	printf("%lld\n",ans);
}

Compilation message

count_triplets.cpp: In function 'void DFSCalculate(int, int, int)':
count_triplets.cpp:30:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int g = 0 ; g < grafo[i].size() ; g++)
                  ~~^~~~~~~~~~~~~~~~~
count_triplets.cpp: In function 'void DFSRotate(int, int)':
count_triplets.cpp:47:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int g = 0 ; g < grafo[i].size() ; g++)
                  ~~^~~~~~~~~~~~~~~~~
count_triplets.cpp: In function 'int main()':
count_triplets.cpp:77: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:81:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d",&n1,&n2);
   ~~~~~^~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 985 ms 1048576 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 985 ms 1048576 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1105 ms 344440 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2680 KB Output is correct
2 Correct 4 ms 2808 KB Output is correct
3 Correct 5 ms 2808 KB Output is correct
4 Correct 5 ms 2808 KB Output is correct
5 Correct 4 ms 2808 KB Output is correct
6 Correct 4 ms 2808 KB Output is correct
7 Correct 4 ms 2808 KB Output is correct
8 Correct 4 ms 2808 KB Output is correct
9 Correct 5 ms 2808 KB Output is correct
10 Correct 4 ms 2680 KB Output is correct
11 Correct 6 ms 2808 KB Output is correct
12 Correct 5 ms 2812 KB Output is correct
13 Correct 5 ms 2680 KB Output is correct
14 Correct 4 ms 2808 KB Output is correct
15 Correct 4 ms 2808 KB Output is correct
16 Correct 4 ms 2808 KB Output is correct
17 Correct 4 ms 2680 KB Output is correct
18 Correct 4 ms 2808 KB Output is correct
19 Correct 5 ms 2780 KB Output is correct
20 Correct 5 ms 2812 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 90 ms 9208 KB Output is correct
2 Correct 121 ms 9180 KB Output is correct
3 Correct 86 ms 9272 KB Output is correct
4 Correct 84 ms 9376 KB Output is correct
5 Correct 84 ms 9304 KB Output is correct
6 Correct 111 ms 14328 KB Output is correct
7 Correct 93 ms 12536 KB Output is correct
8 Correct 91 ms 11640 KB Output is correct
9 Correct 101 ms 10952 KB Output is correct
10 Correct 84 ms 9272 KB Output is correct
11 Correct 79 ms 9208 KB Output is correct
12 Correct 76 ms 9340 KB Output is correct
13 Correct 76 ms 9208 KB Output is correct
14 Correct 76 ms 8948 KB Output is correct
15 Correct 67 ms 8772 KB Output is correct
16 Correct 40 ms 7800 KB Output is correct
17 Correct 57 ms 9580 KB Output is correct
18 Correct 56 ms 9456 KB Output is correct
19 Correct 52 ms 9456 KB Output is correct
20 Correct 53 ms 9464 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2684 KB Output is correct
2 Correct 4 ms 2680 KB Output is correct
3 Execution timed out 1074 ms 1048580 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 80 ms 9252 KB Output is correct
2 Correct 88 ms 9084 KB Output is correct
3 Execution timed out 1104 ms 866148 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 985 ms 1048576 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 985 ms 1048576 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -