Advertisement
Riposati

Chefe-Grafos

Dec 16th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.64 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct grafo{
  6.     int rotuloVertice;
  7.     vector<int>listaArestas;
  8.     bool verticeFechado;
  9.  
  10.     int idadeFuncionario;
  11.     vector<int>rotuloPaiDesteVertice;
  12.  
  13. }typedef Grafo;
  14.  
  15. Grafo grafo[550];
  16. int menorIdade;
  17.  
  18. void DFS(int tamanhoGrafo,int verticeInicial){
  19.     if(grafo[verticeInicial].idadeFuncionario < menorIdade){
  20.         menorIdade = grafo[verticeInicial].idadeFuncionario;
  21.     }
  22.  
  23.     grafo[verticeInicial].verticeFechado = true;
  24.     int u;
  25.  
  26.     for(int y=0;y<grafo[verticeInicial].rotuloPaiDesteVertice.size();y++){
  27.         int r = grafo[verticeInicial].rotuloPaiDesteVertice[y];
  28.  
  29.         for(u=0;u<tamanhoGrafo;u++){
  30.             if(r==grafo[u].rotuloVertice)
  31.             break;
  32.         }
  33.         if(!grafo[u].verticeFechado){
  34.             DFS(tamanhoGrafo,grafo[verticeInicial].rotuloPaiDesteVertice[y]);
  35.         }
  36.     }
  37. }
  38. int main()
  39. {
  40.     int qtdVertices,qtdArestas,qtdInstrucoes;
  41.     int numFuncionario,j,vertice1,vertice2,idadeFuncionario;
  42.     char instrucao;
  43.  
  44.     while(scanf("%d %d %d",&qtdVertices,&qtdArestas,&qtdInstrucoes)!=EOF){
  45.  
  46.         j=0;
  47.  
  48.         for(int i=0;i<qtdVertices;i++){
  49.             grafo[i].rotuloVertice = i;
  50.             grafo[i].verticeFechado = false;
  51.             scanf("%d",&idadeFuncionario);
  52.             grafo[i].idadeFuncionario = idadeFuncionario;
  53.         }
  54.  
  55.         for(int i=0;i<qtdArestas;i++){
  56.             scanf("%d %d",&vertice1,&vertice2);
  57.             vertice1--;
  58.             vertice2--;
  59.             grafo[vertice1].listaArestas.push_back(vertice2);
  60.             grafo[vertice2].rotuloPaiDesteVertice.push_back(vertice1);
  61.         }
  62.         getchar();
  63.         for(int i=0;i<qtdInstrucoes;i++){
  64.  
  65.             scanf("%c",&instrucao);
  66.  
  67.             if(instrucao=='P'){
  68.  
  69.                 scanf("%d",&numFuncionario);
  70.                 numFuncionario = numFuncionario - 1;
  71.  
  72.                 menorIdade = grafo[numFuncionario].idadeFuncionario;
  73.  
  74.                 while(j < qtdVertices){
  75.  
  76.                     if(!grafo[numFuncionario].verticeFechado &&
  77.                         grafo[numFuncionario].rotuloPaiDesteVertice.size() > 0 && j <
  78.                         grafo[numFuncionario].rotuloPaiDesteVertice.size()){
  79.  
  80.                         DFS(qtdVertices,grafo[numFuncionario].rotuloPaiDesteVertice[j]);
  81.                     }
  82.                     j++;
  83.                 }
  84.  
  85.                 if(grafo[numFuncionario].rotuloPaiDesteVertice.size()==0){
  86.  
  87.                     printf("*\n");
  88.                 }else
  89.                     printf("%d\n",menorIdade);
  90.  
  91.                 for(int i=0;i<qtdVertices;i++){
  92.                     grafo[i].verticeFechado = false;
  93.                 }
  94.  
  95.                 getchar();
  96.  
  97.             }else if(instrucao=='T'){
  98.  
  99.                 int v1,v2,i,h;
  100.                 Grafo aux,aux2;
  101.                 scanf("%d %d",&v1,&v2);
  102.  
  103.                 v1-=1;
  104.                 v2-=1;
  105.  
  106.                 for(i=0;i<qtdVertices;i++){
  107.                     if(grafo[i].rotuloVertice==v1){
  108.                         aux = grafo[i];
  109.                         break;
  110.                     }
  111.                 }
  112.  
  113.                 for(h=0;h<qtdVertices;h++){
  114.  
  115.                     if(grafo[h].rotuloVertice==v2){
  116.                         aux2 = grafo[h];
  117.                         break;
  118.                     }
  119.                 }
  120.  
  121.                 grafo[h] = aux;
  122.                 grafo[i] = aux2;
  123.  
  124.                 getchar();
  125.             }
  126.  
  127.             j=0;
  128.         }
  129.  
  130.         for(int i=0;i<qtdVertices;i++){ // serve pra limpa o vector das aresta
  131.             grafo[i].listaArestas.clear();
  132.         }
  133.         getchar();
  134.     }
  135.     return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement