hdu1546+spfa

来源:互联网 发布:python设计模式 pdf 编辑:程序博客网 时间:2024/06/16 13:46

没啥好讲的,直接构图就是。

#include<cstdio>#include<cstring>#include<vector>#include<queue>using namespace std;char str[1100][110];int sw[1100],n;const int inf=1<<30;struct node{    int v,w;    node(int vv,int ww):v(vv),w(ww){}    node(){}};vector<vector<node> > g;int dist[1100],vis[1100];void spfa(){    int i;    for(i=0;i<n;i++)    {        dist[i]=inf;        vis[i]=0;    }    dist[0]=0;    queue<int> q;    q.push(0);    vis[0]=1;    while(!q.empty())    {        int z=q.front();        for(i=0;i<g[z].size();i++)        {            int v2=g[z][i].v;            if(dist[z]+g[z][i].w<dist[v2])            {                dist[v2]=dist[z]+g[z][i].w;                if(!vis[v2])                {                    q.push(v2);                    vis[v2]=1;                }            }        }        q.pop();        vis[z]=0;    }}int main(){    int i,j,k1,k2;    while(scanf("%d",&n)!=EOF&&n!=0)    {        for(i=0;i<n;i++)            scanf("%d %s",&sw[i],str[i]);        g.clear();        g.resize(1100);        for(i=0;i<n;i++)        {            for(j=0;j<n;j++)            {                if(i!=j)                {                    int len=strlen(str[i]);                    for(k1=0,k2=len-4;k1<4&&k2<len;k1++,k2++)                    {                        if(str[i][k2]!=str[j][k1])                            break;                    }                    if(k1>=4)                        g[i].push_back(node(j,sw[i]));                }            }        }        //以上均为构图        spfa();        if(dist[n-1]>=inf) printf("-1\n");        else printf("%d\n",dist[n-1]);    }    return 0;}


0 0
原创粉丝点击