hdoj1596【spfa,松弛】

来源:互联网 发布:魔镜数据好用吗 编辑:程序博客网 时间:2024/04/27 20:56

积压很久的一道。。。一看直接spfa水过。。但是看那个safest怎么求得?松弛的时候取大。

#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef unsigned long long ULL;const double eps=1e-5;const double pi=acos(-1.0);const int mod=1e9+7;const int INF=0x3f3f3f3f;#define N 1010double ma[N][N];int n;bool vis[N];int used[N];double dis[N];int que[N*N];int h,ta;void spfa(int s,int t){    h=0;    ta=1;    memset(dis,0,sizeof(dis));    memset(vis,0,sizeof(vis));    dis[s]=1;    vis[s]=1;    que[h]=s;    while(h<ta)    {        int u=que[h++];        vis[u]=0;        for(int i=1;i<=n;i++)            {                 if(ma[u][i]==0||u==i)                    continue;                if(dis[i]<dis[u]*ma[u][i])                {                    dis[i]=dis[u]*ma[u][i];                    if(!vis[i])                    {                        vis[i]=1;                        que[ta++]=i;                    }                }            }    }    if(dis[t]!=0)        printf("%.3lf\n",dis[t]);    else        puts("What a pity!");}int main(){    while(~scanf("%d",&n))    {        for(int i=1;i<=n;i++)        {            for(int j=1;j<=n;j++)            {                scanf("%lf",&ma[i][j]);            }        }        int m;        scanf("%d",&m);        for(int i=0;i<m;i++)        {            int a,b;            scanf("%d%d",&a,&b);            spfa(a,b);        }    }     return 0; }
0 0
原创粉丝点击