[TIOJ] 1212. 圖論 之 最小圈測試

題目連結:http://tioj.infor.org/problems/1212
本題要找最小環,那要怎麼做呢?其實就直接做Floyd-Warshall,然後看哪一組自己到自己最小,大概就這樣吧XD
#include <bits/stdc++.h>
using namespace std;
#define INF 999999
#define N 500

int graph[N + 10][N + 10];

int main(){
	int n,m;
	scanf("%d%d",&n,&m);
	while(n!=0||m!=0){
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				graph[i][j]=INF;
		for(int i=0;i<m;i++){
			int a,b;
			scanf("%d%d",&a,&b);
			graph[a][b]=1;
		}
		for(int k=1;k<=n;k++)
			for(int i=1;i<=n;i++)
				for(int j=1;j<=n;j++)
					graph[i][j] = min(graph[i][j], graph[i][k]+graph[k][j]);
		int mm=INF;
		for(int i=1;i<=n;i++)
			mm = min(graph[i][i], mm);	
		if(mm==INF)
			puts("0");
		else
			printf("%d\n",mm);
		scanf("%d%d",&n,&m);
	}
	return 0;
}

留言

這個網誌中的熱門文章

[TIOJ] 1094. C.幼稚國王的獎賞

[Codeforces] 731F. Video Cards

[IOJ] 19. 啦啦啦