SuitNdtie

Killtime

Apr 13th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.87 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<vector>
  3. using namespace std;
  4. int n,m,k;
  5. int st,sp;
  6. struct edge{
  7.     int v,c,w;
  8. };
  9.  
  10. vector<edge> adj[310];
  11. int dp[310][2010];
  12. int recur(int u,int t){
  13.     if(dp[u][t] != -1)return dp[u][t];
  14.     int maxa = ( u == sp ? 0 : -2e9 );
  15.     for(int i = 0 ; i < adj[u].size();i++){
  16.         int v = adj[u][i].v;
  17.         int c = adj[u][i].c;
  18.         int w = adj[u][i].w;
  19.         if(t - w >= 0)maxa = max(maxa,recur(v,t - w) + c);
  20.     }
  21. //  printf("test %d %d : %d\n",u,t,maxa);
  22.     return dp[u][t] = maxa;
  23. }
  24.  
  25. int main()
  26. {
  27.     for(int i=0;i<310;i++)for(int j=0;j<2010;j++)dp[i][j] = -1;
  28.     scanf("%d %d %d",&n,&m,&k);
  29.     scanf("%d %d",&st,&sp);
  30.     for(int i=1;i<=m;i++){
  31.         int u,v,c,w;
  32.         scanf("%d %d %d %d",&u,&v,&c,&w);
  33.         adj[u].push_back({v,c,w});
  34.         adj[v].push_back({u,c,w});
  35.     }
  36.     int ans = recur(st,k);
  37.     if(ans > 0){
  38.         printf("%d",ans);
  39.     }else{
  40.         printf("Impossible");
  41.     }
  42.     return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment