首页 > 代码库 > POJ 3411 Paid Roads
POJ 3411 Paid Roads
题目来源:http://poj.org/problem?id=3411
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 5383 | Accepted: 1923 |
Description
A network of m roads connects N cities (numbered from 1 to N). There may be more than one road connecting one city with another. Some of the roads are paid. There are two ways to pay for travel on a paid road ifrom city ai to city bi:
- in advance, in a city ci (which may or may not be the same as ai);
- after the travel, in the city bi.
The payment is Pi in the first case and Ri in the second case.
Write a program to find a minimal-cost route from the city 1 to the city N.
Input
The first line of the input contains the values of N and m. Each of the following m lines describes one road by specifying the values of ai, bi, ci, Pi, Ri (1 ≤ i ≤ m). Adjacent values on the same line are separated by one or more spaces. All values are integers, 1 ≤ m, N ≤ 10, 0 ≤ Pi , Ri ≤ 100, Pi ≤ Ri (1 ≤ i ≤ m).
Output
The first and only line of the file must contain the minimal possible cost of a trip from the city 1 to the city N. If the trip is not possible for any reason, the line must contain the word ‘impossible’.
Sample Input
4 5 1 2 1 10 10 2 3 1 30 50 3 4 3 80 80 2 1 2 10 10 1 3 2 10 50
Sample Output
110
Source
#include<iostream> #define Max 9999999 using namespace std; int map[11][5],n,m,count=0,res=Max; int p[11],pt[11]={0}; void dfs(int k){ if(k==n){ if(count<res) res=count; return ; } for(int i=1;i<=m;i++) if(k==map[i][0]&&pt[map[i][0]]<3){ count+=map[i][p[map[i][2]]+3]; int tempx=p[map[i][0]]; p[map[i][0]]=0; pt[map[i][0]]++; if(count<res) dfs(map[i][1]); pt[map[i][0]]--; p[map[i][0]]=tempx; count-=map[i][p[map[i][2]]+3]; } } int main(){ cin>>n>>m; for(int i=1;i<=m;i++) p[i]=1; for(int i=1;i<=m;i++) cin>>map[i][0]>>map[i][1]>>map[i][2]>>map[i][3]>>map[i][4]; dfs(1); if(res!=Max) cout<<res<<endl; else cout<<"impossible\n"; return 0; }
POJ 3411 Paid Roads