#include<iostream>//AC
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<map>
using namespace std;
const int maxe=2500;
const int maxv=50;
map<string,int> mmap;
int cnt;
double dis[maxv];
struct Edge {
int from,to;
double val;
} edge[maxe];
void init() {
cnt=0;
}
void addedge(int from,int to,double val) {
edge[cnt].from=from;
edge[cnt].to=to;
edge[cnt++].val=val;
}
bool Bellman_Ford(int s,int n,int cnt,Edge edge[]) {
memset(dis,0,sizeof dis);//第一开始为了降低函数的耦合性,我传了5个参数,最后一个参数是 int dist[] 然后这里memset(dist),一直WA,按了一下F2,发现日志中有个警告,才发现memset sizeof指针了,memset等于无效了
dis[s]=1;
for(int i=1; i<=n; i++) {
for(int j=0; j<cnt; j++) {
if(dis[edge[j].to]<dis[edge[j].from]*edge[j].val)
dis[edge[j].to]=dis[edge[j].from]*edge[j].val;
}
}
if(dis[s]>1.0)
return true;
else
return false;
}
int main(void) {
#ifndef ONLINE_JUDGE
freopen("E:\\input.txt","r",stdin);
#endif // ONLINE_JUDGE
int kase=0,n,m;
while(cin>>n&&n) {
init();
mmap.clear();//TODO:我觉得没有这个也没有事情
string s,s1,s2;
for(int i=1; i<=n; i++)
cin>>s,mmap[s]=i;
cin>>m;
double rate;
for(int i=0; i<m; i++) {
cin>>s1>>rate>>s2;
addedge(mmap[s1],mmap[s2],rate);
}
int i;
for(i=1; i<=n; i++)//因为任意一个结点上有正权环都可以输出“YES”,所以我们这里遍历所有结点。
if(Bellman_Ford(i,n,cnt,edge))
break;
cout<<"Case "<<++kase<<": ";
if(i==n+1)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
return 0;
}
#include<iostream>//WA
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<map>
using namespace std;
const int maxe=2500;
const int maxv=50;
map<string,int> mmap;
int cnt;
double dis[maxv];
struct Edge {
int from,to;
double val;
} edge[maxe];
void init() {
cnt=0;
}
void addedge(int from,int to,double val) {
edge[cnt].from=from;
edge[cnt].to=to;
edge[cnt++].val=val;
}
bool Bellman_Ford(int s,int n,int cnt,Edge edge[]) {
bool flag;
dis[s]=1;
for(int i=1; i<=n; i++) {
flag=false;
for(int j=0; j<cnt; j++) {
if(dis[edge[j].to]<dis[edge[j].from]*edge[j].val){
dis[edge[j].to]=dis[edge[j].from]*edge[j].val;
flag=true;
}
}
if(flag==false)
break;
}
return flag;
}
int main(void) {
#ifndef ONLINE_JUDGE
freopen("E:\\input.txt","r",stdin);
#endif // ONLINE_JUDGE
int kase=0,n,m;
while(cin>>n&&n) {
init();
string s,s1,s2;
for(int i=1; i<=n; i++)
cin>>s,mmap[s]=i;
cin>>m;
double rate;
for(int i=0; i<m; i++) {
cin>>s1>>rate>>s2;
addedge(mmap[s1],mmap[s2],rate);
}
int i;
cout<<"Case "<<++kase<<": ";
if(Bellman_Ford(1,n,cnt,edge))//就这里有改动,我认为不用遍历所有结点,因为BF算法也可以找到非本结点的正权环,但是一直WA。以后填坑吧。
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}