Saturday, 29 July 2017

Lightoj 1049 - One Way Roads

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <vector>
  4. #include <algorithm>
  5. #define MAX 105
  6. using namespace std;
  7. int cost[MAX][MAX],visit[MAX],ans1,ans2,n;
  8. vector <int> adjList [MAX];
  9. int dfs()
  10. {     int u, i = 1,j, red = 0, black = 0;
  11.     while (true) {
  12.         u = 205;
  13.           for(j=0;j<adjList[i].size();j++){
  14.             if (!visit [adjList [i][j]]) {
  15.                 u = adjList [i][j];
  16.                 break;
  17.             }
  18.         }
  19.         if (== 205) break;
  20.         visit[u]=1;
  21.         red += ((int) cost [i][u]);
  22.         black += ((int) cost [u][i]);
  23.         i = u;
  24.     }
  25.  
  26.     red += ((int) cost [i][1]);
  27.     black += ((int) cost [1][i]);
  28.     return min (red, black);
  29. }
  30. void solve()
  31. {   int u,v,w,i;
  32.     scanf("%d",&n);
  33.     memset(visit,0,sizeof(visit));
  34.     memset(cost,0,sizeof(cost));
  35.     for(i=0;i<=n+1;i++) adjList[i].clear();
  36.     for(i=1;i<=n;i++)
  37.     {
  38.         scanf("%d %d %d",&u,&v,&w);
  39.         cost[u][v]=0;
  40.         cost[v][u]=w;
  41.         adjList[u].push_back(v);
  42.         adjList[v].push_back(u);
  43.     }
  44.     visit[1]=1;
  45.     //ans2+=cost[1][adjList[1][1]];
  46.     //ans1+=cost[adjList[1][1]][1];
  47.     printf("%d\n",dfs());
  48. }
  49. int main()
  50. {
  51.     int t,cs;
  52.     scanf("%d",&t);
  53.     for(cs=1;cs<=t;cs++)
  54.     {
  55.         printf("Case %d: ",cs);
  56.         solve();
  57.     }
  58. }

No comments:

Post a Comment

Most Featured Post

Lightoj 1159 - Batman

http://lightoj.com/volume_showproblem.php?problem=1159 problem analysis: First i thought of this as if s1, s2 and s3 are those three str...