求助 样例都没过... 乘法最短路
查看原帖
求助 样例都没过... 乘法最短路
117662
那一条变阻器楼主2020/7/5 16:15

转化过加法还是错的,索性就不转了,样例双yes

#include <bits/stdc++.h>
using namespace std;
struct node{
	int l , r;
	double w;
};
node e[10010];
int n , m , tot;
double dis[10010];
bool ford(int s){
	memset(dis , 0 , sizeof(dis));
	dis[s] = 1;
	for(int i = 1; i < n; i++)
		for(int j = 1; j <= m; j++)
			if(dis[e[j].r] < dis[e[j].l] * e[j].w)
				dis[e[j].r] = dis[e[j].l] * e[j].w;
	for(int i = 1; i <= n; i++)
		if(dis[i] > 1){
			//for(int j = 1; j <= n; j++) cout << dis[j] << " ";
			//cout << endl;
			return true;
		}
	return false;
}
int main(){
	while(1){
		cin >> n;
		if(!n) break;
		map<string , int> id;
		for(int i = 1; i <= n; i++){
			string x;
			cin >> x;
			id[x] = i;
		}
		cin >> m;
		for(int i = 1; i <= m; i++){
			string x , y;
			double z;
			cin >> x >> z >> y;
			e[i].l = id[x] , e[i].r = id[y] , e[i].w = z;
		}
		int f = 0;
		for(int i = 1; i <= n; i++)
			if(ford(i)){
				f = 1;
				break;
			}
		cout << "Case " << ++tot << ": ";
		if(f) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	return 0;
}
2020/7/5 16:15
加载中...