标签:nal ane work pac mod 思路 called get dig
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4000 Accepted Submission(s):
1363
#include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 1000010 using namespace std; int n,tot; queue<int>que; char s[1010][110]; int dis[MAXN],vis[MAXN],num[MAXN]; int to[MAXN],net[MAXN],cap[MAXN],head[MAXN]; void add(int u,int v,int w){ to[++tot]=v;cap[tot]=w;net[tot]=head[u];head[u]=tot; } int judge(int u,int v){ int len1=strlen(s[u]); int len2=strlen(s[v]); for(int i=0,j=len2-4;i<4,j<=len2-1;i++,j++) if(s[u][j]!=s[v][i]) return false; return true; } void spfa(){ memset(vis,0,sizeof(vis)); memset(dis,0x7f,sizeof(dis)); while(!que.empty()) que.pop(); que.push(1);vis[1]=1;dis[1]=0; while(!que.empty()){ int now=que.front(); que.pop();vis[now]=0; for(int i=head[now];i;i=net[i]) if(dis[to[i]]>dis[now]+cap[i]){ dis[to[i]]=dis[now]+cap[i]; if(!vis[to[i]]){ vis[to[i]]=1; que.push(to[i]); } } } } int main(){ while(scanf("%d",&n)&&n!=0){ for(int i=1;i<=n;i++) cin>>num[i]>>s[i]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(judge(i,j)) add(i,j,num[i]); spfa(); if(dis[n]<2139062143) cout<<dis[n]<<endl; else cout<<"-1"<<endl; tot=0; memset(cap,0,sizeof(cap)); memset(head,0,sizeof(head)); } } /* 5 5 12345978ABCD2341 5 23415608ACBD3412 7 34125678AEFD4123 15 23415673ACC34123 4 41235673FBCD2156 2 20 12345678ABCD 30 DCBF5432167D 5 5 12345978ABCD1234 5 23415608ACBD3412 7 34125678AEFD4123 5 41235673FBCD1234 5 12345978ABCD1234 1 5 123456781234 0 */
HDU 1546 Idiomatic Phrases Game 求助!help!!!
标签:nal ane work pac mod 思路 called get dig
原文地址:https://www.cnblogs.com/cangT-Tlan/p/8969389.html