记录编号 |
157534 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[USACO Jan15] 牛的路线2 |
最终得分 |
100 |
用户昵称 |
TA |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.033 s |
提交时间 |
2015-04-09 11:02:24 |
内存使用 |
1.52 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
inline void in(int &x){
char c=getchar();
while(c<'0'||c>'9')c=getchar();
x=0;
for(;c>='0'&&c<='9';c=getchar())x=x*10+(c^48);
}
#include<bitset>
bitset<10005> p[505][2];//航线i,有无j,0表示在A之后,1表示在B之前。
int main(){
freopen("cowrouteb.in","r",stdin);
freopen("cowrouteb.out","w",stdout);
int A,B,N;
in(A),in(B),in(N);
int c[505],i,j,son[505],flag[505];//00表示无A无B,10表示只有A,01表示只有B,11表示既有A,又有B。
for(i=0;i<N;++i){
in(c[i]),in(son[0]);
for(j=1;j<=son[0];++j)in(son[j]);
for(j=1;j<=son[0];++j)
if(son[j]==A){
flag[i]|=2;
break;
}
while(++j<=son[0])p[i][0][son[j]]=1;
for(j=son[0];j;--j)
if(son[j]==B){
flag[i]|=1;
break;
}
while(--j>0)p[i][1][son[j]]=1;
}
int ans=0x7fffffff;
bitset<10005> tmp;
for(i=0;i<N;++i)
if(flag[i]&2)
for(j=0;j<N;++j)
if(flag[j]&1&&(i==j?c[i]:c[i]+c[j])<ans&&(p[i][0]&p[j][1]).any())
ans=i==j?c[i]:c[i]+c[j];
printf("%d\n",ans==0x7fffffff?-1:ans);
}