제출 #59293

#제출 시각아이디문제언어결과실행 시간메모리
59293thiago4532철인 이종 경기 (APIO18_duathlon)C++17
0 / 100
4 ms864 KiB
#include <bits/stdc++.h>

using namespace std;
const int maxn = 20, inf = 0x3f3f3f3f;
vector<int> grafo[maxn];
int dist[maxn];
bool mark[maxn];

void bfs(int u, int l){
	memset(dist, inf, sizeof dist);
	dist[u] = 0;
	dist[l] = -inf;

	queue<int> fila;
	fila.push(u);

	while(!fila.empty()){
		int u = fila.front();
		fila.pop();

		for(auto v : grafo[u]){
			if(!mark[v] && dist[v] > dist[u] + 1){
				dist[v] = dist[u] + 1;
				fila.push(v);
			}
		}
	}
}

void dfs(int u){
	mark[u] = true;

	int val = -1;
	for(auto v : grafo[u]){
		if(dist[v] + 1 == dist[u]){
			if(val == -1) val = v;
			else val = -2;
		}
	}

	if(val > 0) dfs(val);
	else return;
}

int main(){
	int n, m;
	cin >> n >> m;
	for(int i=1;i<=m;i++){
		int a, b;
		cin >> a >> b;
		grafo[a].push_back(b);
		grafo[b].push_back(a);
	}


	int ans=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				if(i == j || j == k || i == k) continue;
				memset(mark, 0, sizeof mark);
				
				bfs(i, k);
				if(dist[j] >= inf) continue;
				dfs(j);
				bfs(j, 0);
				if(dist[k] < inf) ans++;
			}
		}
	}
	cout << ans << "\n";
	return 0;
}
#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...