poj3411
#include<iostream> int m,n;//n个城市 m条道路 struct node{ int a,b,c,p,r; }; int visit[11]={0}; int min=100000; node point[11]; void dfs(int k,int cost) { if(cost>=min) { return; } if(point[k].b==n) { if(min>cost) { min=cost; } return; } for(int i=0;i<m;i++) { if(point[k].b==point[i].a&&visit[point[i].b]<=3) { visit[point[i].b]++; if(visit[point[i].c]>=1) { cost=cost+point[i].p;} else{ cost=cost+point[i].r; } dfs(i,cost); visit[point[i].b]--; if(visit[point[i].c]>=1) { cost=cost-point[i].p;} else{ cost=cost-point[i].r; } } } } int main() { freopen("input.txt","r",stdin); scanf("%d",&n); scanf("%d",&m); for(int i=1;i<=n;i++) visit[i]=0; min=100000; for(int i=0;i<m;i++) { scanf("%d%d%d%d%d",&point[i].a,&point[i].b,&point[i].c,&point[i].p,&point[i].r); } for(int i=0;i<m;i++) { if(point[i].a==1) { visit[point[i].a]++; visit[point[i].b]++; if(visit[point[i].c]>0){ dfs(i,point[i].p);} else{ dfs(i,point[i].r); } for(int i=1;i<=n;i++) visit[i]=0; } } if(min==100000) { printf("impossible\n"); }else{ printf("%d\n",min); } return 0; }