usaco --fence6

来源:互联网 发布:漂亮妈妈 知乎 编辑:程序博客网 时间:2024/04/28 07:20
#define maxn 100000000
using namespace std;
ifstream fin("fence6.in");
ofstream fout("fence6.out");
int v[120],e[2][120][10];
int n;
void init()
{
fin>>n;
int c;
for(int i=0;i<n;i++)
{
fin>>c;
fin>>v[c];
fin>>e[0][c][0]>>e[1][c][0];
for(int j=1;j<=e[0][c][0];j++)fin>>e[0][c][j];
for(int j=1;j<=e[1][c][0];j++)fin>>e[1][c][j];
}
}
int dij(int u)
{
int k,d,bef[120],dis[120];
bool vis[120],ok0;
for(int i=0;i<=n;i++)
{
bef[i]=-1;dis[i]=maxn;vis[i]=0;
}
for(int i=1;i<=e[0][u][0];i++)bef[e[0][u][i]]=u;
for(int i=1;i<=e[0][u][0];i++)dis[e[0][u][i]]=v[u];
while(1)
{
int j=0,k=maxn;
for(int i=1;i<=n;i++)
{
if(dis[i]<k&&!vis[i])
{
j=i;
k=dis[i];
}
}
if(j==0)break;
if(j==u)return dis[u];
vis[j]=1;ok0=1;
for(int i=1;i<=e[0][j][0];i++)if(e[0][j][i]==bef[j]){
ok0=0;break;
}
if(ok0)d=0;
else d=1;
for(int i=1;i<=e[d][j][0];i++)
{
if(dis[e[d][j][i]]>v[j]+dis[j])
{
dis[e[d][j][i]]=v[j]+dis[j];
bef[e[d][j][i]]=j;
}
}
}
return maxn;
}
void slove()
{
int ans=maxn;
for(int i=1;i<=n;i++)
{
int temp=dij(i);
if(temp<ans)ans=temp;
}
fout<<ans<<endl;
}
int main()
{
init();
slove();
return 0;
}
原创粉丝点击