HDU 4360 - As long as Binbin loves Sangsang

来源:互联网 发布:知乎赞同过的查找 编辑:程序博客网 时间:2024/04/29 06:34

 

题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4360

 

2012 年多校 第7场, 1001 。

 

方法: 优先队列 + SPFA 

 

基础题。。。。   Trick 是,最终结果会爆int (有的数据需要重复兜圈)。。。

 

#include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<cmath>#include<cstring>using namespace std;const __int64 inf = (__int64)0x7ffffff * 0x7ffffff;int pp[100];struct Point{int x,p,num;__int64 cost;bool friend operator<(Point a,Point b){return a.cost!=b.cost?a.cost>b.cost:a.num<b.num;}}res; priority_queue<Point>que;struct Edge{int t,nxt,len,p;}eg[30000];int et[2000],tol;void add_edge(int u,int v,int l,char p){eg[tol].t=v;eg[tol].nxt=et[u];eg[tol].len=l;eg[tol].p=pp[p];et[u]=tol++;}__int64 dis[2000][4];int num[2000][4];void init_(int n){for(int i=1;i<=n;i++){et[i]=-1;for(int j=0;j<4;j++)dis[i][j]=inf,num[i][j]=0;}tol=0;while(!que.empty()) que.pop();}int spfa(int x,int n){Point no,nx;int i;no.x=x,no.p=-1,no.num=0,no.cost=0;que.push(no);while(!que.empty()){no=que.top();que.pop();if(no.x==n && no.p==3){res=no;return 1;}for(i=et[no.x];i!=-1;i=eg[i].nxt){nx.p=no.p+1;if(nx.p==4) nx.p=0;if(eg[i].p!=nx.p) continue;nx.x=eg[i].t;nx.cost=no.cost+eg[i].len;nx.num=no.num;if(nx.p==3) nx.num++; if(dis[nx.x][nx.p]<nx.cost || dis[nx.x][nx.p]==nx.cost && num[nx.x][nx.p]>=nx.num) continue;dis[nx.x][nx.p]=nx.cost;num[nx.x][nx.p]=nx.num;que.push(nx);}}return 0;}int main(){int n,m,t,tt=1;int u,v,len;char op[2];pp['L']=0,pp['O']=1,pp['V']=2,pp['E']=3;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);init_(n);while(m--){scanf("%d%d%d%s",&u,&v,&len,op);add_edge(u,v,len,op[0]);if(u!=v) add_edge(v,u,len,op[0]);}printf("Case %d: ",tt++);if(spfa(1,n)) printf("Cute Sangsang, Binbin will come with a donkey after travelling %I64d meters and finding %d LOVE strings at last.",res.cost,res.num);else printf("Binbin you disappoint Sangsang again, damn it!");puts("");}return 0;}/*29 121 3 2 L3 5 2 O5 7 2 V7 9 2 E1 2 1 L2 3 1 O3 4 1 V4 5 1 E5 6 1 L6 7 1 O7 8 1 V8 9 1 E1 41 1 1 L1 1 1 O1 1 1 V1 1 1 E*/


 

原创粉丝点击