int main() { double x; int ji,i,f,k,m,xe,xs,flag; ji=0; while(scanf("%d",&n),n) { ji++; getchar(); chu(); for(i=0;i<n;i++) { gets(ch[i]); } scanf("%d",&m); getchar(); for(i=0;i<m;i++) { scanf("%s%lf%s",s,&x,e); xs=finds(); xe=finde(); if(-1==map[xs][xe]||x>map[xs][xe]) { map[xs][xe]=x; } } for(k=0;k<n;k++) { for(i=0;i<n;i++) { for(f=0;f<n;f++) { if(-1!=map[i][k]&&-1!=map[k][f]) { map[i][f]=maxx(map[i][f],map[i][k]*map[k][f]); } } } } flag=0; for(i=0;i<n;i++) { if(1<map[i][i]) { flag=1; break; } } if(1==flag) { printf("Case %d: Yes\n",ji); } else { printf("Case %d: No\n",ji); } } return 0; }
t_graph* prim( t_graph* g, int s) { t_graph *mst; int count, i; t_pQueue *pq; t_edge *min; if(g!=NULL && s>=0 && s < (g->v)) { mst = new_graph(g->v); pq = new_priorityCap(g->e); for(i=0; i<g->v;i++) add_vertex(mst, g->vertices[i].name); mst->vertices[s].visited = TRUE; for(i=0; i< g->v;i++) { if(i!=s && g->am[s][i]!=INF) enqueue(pq, (void*) (finde(g, i ,s, g->am[s][i])),&eecomp) ; } count = 0; while (count<g->v) { for(min=dequeue(pq, &eecomp);min!=NULL && !(mst->vertices[min->dst].visited);min=dequeue(pq, &eecomp)) ; if(min!= NULL) { mst->vertices[min->dst].visited = TRUE; add_edge(mst, min->src, min->dst, min->weight); count++; for(i=0; i< g->v;i++) { if(i!=s && g->am[s][i]!=INF) enqueue(pq, (void*) (finde(g, i, s, g->am[s][i])),&eecomp) ; } } } free(pq); free(min); return mst; } }