比赛 |
20161215 |
评测结果 |
AAAAAAAAAA |
题目名称 |
牛的路线2 |
最终得分 |
100 |
用户昵称 |
AAAAAAAAAA |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2016-12-16 20:13:36 |
显示代码纯文本
#include<cstdio>
namespace IO{
char buf[1<<15],*fs,*ft;
inline char gc(){return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;}
inline int qr(){
int x=0,ch=gc();
while(ch<'0'||ch>'9'){ch=gc();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=gc();}
return x;}
}using namespace IO;
using namespace std;
/***********************************************************************************************/
int min1(int x,int y){
return x<y? x:y;}
int sb(){
freopen ("cowrouteb.in","r",stdin);
freopen ("cowrouteb.out","w",stdout);
int A,B,N,i,j,num,cost,temp1,temp2,ans=99999999,flag1=0,flag2=0;
int d1[11000],d2[11000],city[11000];//d1[i]表示从起点到i的最小值,d2[i]表示从i到终点的最小值
A=qr();B=qr();N=qr();
for(i=1;i<=11000;i++){
d1[i]=99999999;
d2[i]=99999999;}
d1[A]=0;d2[B]=0;
for(i=0;i<N;i++){
flag1=0;flag2=0;
cost=qr();num=qr();
for(j=0;j<num;j++){
city[j]=qr();
if(city[j]==A){temp1=j;flag1=1;}
if(city[j]==B){temp2=j;flag2=1;}}
if(flag1==1){
for(j=temp1;j<num;j++){
d1[city[j]]=min1(d1[city[j]],cost);}}
if(flag2==1){
for(j=temp2;j>=0;j--){
d2[city[j]]=min1(d2[city[j]],cost);}}}
for(i=0;i<11000;i++){
ans=min1(ans,d1[i]+d2[i]);}
if(ans==99999999){
printf("-1");}
else{
printf("%d",ans);}
return 0;
}
int chh=sb();
int main(){
return 0;
}