#include<iostream>
#include<cstdio>
#include<cstring>
#define INF 0x3f3f3f3f
const int maxn=10+10;
int vis[maxn];
int min_cost,fee;
int n,m;
struct node
{
int a,b,c,p,r;
}e[maxn];
void dfs(int x,int fee)
{
if(x==n)
if(min_cost>fee)
{
min_cost=fee;
return;
}
else return;
int i;
for(i=1;i<=m;i++)
{
if(e[i].a==x&&vis[e[i].b]<3)
{
vis[e[i].b]++;
if(vis[e[i].c])
dfs(e[i].b,fee+e[i].p);
else
dfs(e[i].b,fee+e[i].r);
vis[e[i].b]--;
}
}
}
int main()
{
//freopen("123.txt","r",stdin);
int i;
while(~scanf("%d %d",&n,&m))
{
memset(vis,0,sizeof(vis));
min_cost=INF;
for(i=1;i<=m;i++)
scanf("%d%d%d%d%d",&e[i].a,&e[i].b,&e[i].c,&e[i].p,&e[i].r);
vis[1]=1;
dfs(1,0);
if(min_cost!=INF)
printf("%d\n",min_cost);
else
printf("impossible\n");
}
return 0;
}
POJ 3411(搜索)
最新推荐文章于 2018-07-15 21:33:20 发布