PTA 7-12 How Long Does It Take (25 分)

#include <bits/stdc++.h>

using namespace std;

const int maxn = 100;

int mapn[maxn][maxn], dis[maxn];
int in[maxn];
int n, m;

int toposort();

int main()
{
	#ifdef ONLINE_JUDGE
	#else
	freopen("in.txt","r",stdin);
	#endif
	
	int i;
	
	memset(mapn, -1, sizeof(mapn));
	memset(dis, 0, sizeof(dis));
	memset(in, 0, sizeof(in));
	
	cin >> n >> m;
	
	int from, to, cost;
	
	for(i = 0; i < m; i++){
		
		cin >> from >> to >> cost;
		mapn[from][to] = cost;
		in[to] ++;
		
	}
	
	if(toposort()) cout << "Impossible" << endl;
	else{
		
		int maximum = -1;
		
		for(i = 0; i < n; i++){
			
			if(maximum < dis[i]) maximum = dis[i];
			
		}
		
		cout << maximum;
		
	}
	
	return 0;
	
}

int toposort()
{
	queue<int> que;
	int cnt = 0;
	int i;
	
	for(i = 0; i < n; i++){
		
		if(in[i] == 0) que.push(i);
		
	}
	
	while(!que.empty()){
		
		int v = que.front();
		cnt++;
		que.pop();
		
		for(i = 0; i < n; i++){
			
			if(mapn[v][i] != -1){
				
				dis[i] = max(dis[i], dis[v] + mapn[v][i]);
				
				if(--in[i] == 0) que.push(i);
				
			}
		}
		
	}
	
	if(cnt == n) return 0;
	else return 1;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章