Advertisement
Guest User

Untitled

a guest
Mar 17th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define db(x) cerr << #x << " = " << x << endl
  3. #define _ << " , " <<
  4. using namespace std;
  5. typedef long long ll;
  6.  
  7. int N, M, I, E, a, b;
  8. int age[501], pos[501];
  9. int vis[500];
  10. vector<int> arestas[501];
  11.  
  12. void mostrar_grafo() {
  13.   printf("GRAFO\n");
  14.   for(int i=1; i<=N; i++){
  15.     printf("%d -> ",i);
  16.     for(auto v : arestas[i]) printf("%d ",v);
  17.     printf("\n");
  18.   }
  19. }
  20.  
  21. void mostar_posicoes() {
  22.   printf("POSICOES\n");
  23.   for (int i = 1; i <= N; i++) printf("%d -> %d\n",i,pos[i]);
  24. }
  25. void mostar_ages() {
  26.   printf("AGES\n");
  27.   for (int i = 1; i <= N; i++) printf("%d -> %d\n",i,age[i]);
  28. }
  29.  
  30. int dfs(int x){
  31.   if(vis[x]) return vis[x];
  32.   int min_x=age[x];
  33.   for (auto v : arestas[x]){
  34.     min_x=min(min_x,dfs(v));
  35.   }
  36.   return vis[x] = min_x;
  37. }
  38.  
  39. void trocar(int a, int b){
  40.   swap(pos[a],pos[b]);
  41.   swap(age[pos[a]],age[pos[b]]);
  42. }
  43.  
  44. int main() {
  45.   char op;
  46.   while(scanf("%d%d%d",&N,&M,&I)!=EOF){        
  47.     for (int i = 1; i <= N; i++) {
  48.       scanf("%d",&age[i]);
  49.       pos[i]=i;
  50.     }
  51.  
  52.     for (int i = 1; i <= M; i++) {
  53.       int x, y;
  54.       scanf("%d%d",&x,&y); // x gerencia y
  55.       arestas[y].push_back(x);
  56.     }
  57.  
  58.     //mostrar_grafo();
  59.     //mostar_posicoes();
  60.     //mostar_ages();
  61.  
  62.     for (int i = 1; i <= I; i++) {
  63.       scanf("%d",&a);
  64.       scanf("%c%d",&op,&a);
  65.  
  66.       if (op == 'T') {
  67.         scanf("%d",&b);
  68.         //printf("Trocar %d com %d\n",a,b);
  69.         trocar(a,b);
  70.       } else if (op == 'P') {
  71.         E = a;
  72.         //printf("Procurar gerente mais novo de %d\n",E);
  73.  
  74.         if(arestas[pos[E]].empty()) printf("*\n");
  75.         else {
  76.           for(int i = 0; i <= N; i++) vis[i] = 0;
  77.           int min_x = 1e9;
  78.           for (auto v : arestas[pos[E]]) min_x = min(min_x,dfs(v));
  79.           //printf("Gerente mais novo de %d -> %d\n",E,min_x);
  80.           printf("%d\n",min_x);
  81.         }
  82.       }
  83.       //mostar_posicoes();
  84.       //mostar_ages();
  85.     }
  86.  
  87.     for (int x=1 ; x <= N; x++)
  88.       arestas[x].clear();
  89.   }
  90.   return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement