poj 2472

#include<iostream>
#include<fstream>
#include<queue>
#include<cmath>

using namespace std;

struct e{
    int data;
    double w;
    e *next;
};

e edge[101];


int n,m;
double d[101];
int v[101];


void solve(){
    int i,j,k;
    queue<int> q;
    for(i=1;i<=n;i++)
        d[i]=-10000000;
    d[1]=0;
    q.push(1);
    v[1]=1;
    while(!q.empty())
    {
        i=q.front();
        q.pop();
        v[i]=0;
        e *p=edge[i].next;
        while(p)
        {
            if(d[p->data]<d[i]+p->w)
            {
                d[p->data]=d[i]+p->w;
                if(v[p->data]==0)
                    q.push(p->data);
            }
            p=p->next;
       
        }
    }
    printf("%.6lf percent\n",100*exp(d[n]));

}

       


void add(int s,int t,double w)
{
    e *p=new e;
    p->data=s;
    p->w=w;
    p->next=edge[t].next;
    edge[t].next=p;

    e *q=new e;
    q->data=t;
    q->w=w;
    q->next=edge[s].next;
    edge[s].next=q;
}

void read(){
//    ifstream cin("in.txt");
    int i,j,k;
    int s,t;
    double w;
    while(cin>>n)

    {
        if(n==0) return;
        cin>>m;
        for(i=1;i<=n;i++)
            edge[i].next=0;
        for(i=1;i<=m;i++)
        {
            cin>>s>>t>>w;
            add(s,t,log(w/100));
        }
        solve();
    }
}

int main(){
    read();
    return 0;
}

posted on 2011-05-31 10:34  宇宙吾心  阅读(236)  评论(0)    收藏  举报

导航