Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct grafo{
- int rotuloVertice;
- vector<int>listaArestas;
- bool verticeFechado;
- int idadeFuncionario;
- vector<int>rotuloPaiDesteVertice;
- }typedef Grafo;
- Grafo grafo[550];
- int menorIdade;
- void DFS(int tamanhoGrafo,int verticeInicial){
- if(grafo[verticeInicial].idadeFuncionario < menorIdade){
- menorIdade = grafo[verticeInicial].idadeFuncionario;
- }
- grafo[verticeInicial].verticeFechado = true;
- int u;
- for(int y=0;y<grafo[verticeInicial].rotuloPaiDesteVertice.size();y++){
- int r = grafo[verticeInicial].rotuloPaiDesteVertice[y];
- for(u=0;u<tamanhoGrafo;u++){
- if(r==grafo[u].rotuloVertice)
- break;
- }
- if(!grafo[u].verticeFechado){
- DFS(tamanhoGrafo,grafo[verticeInicial].rotuloPaiDesteVertice[y]);
- }
- }
- }
- int main()
- {
- int qtdVertices,qtdArestas,qtdInstrucoes;
- int numFuncionario,j,vertice1,vertice2,idadeFuncionario;
- char instrucao;
- while(scanf("%d %d %d",&qtdVertices,&qtdArestas,&qtdInstrucoes)!=EOF){
- j=0;
- for(int i=0;i<qtdVertices;i++){
- grafo[i].rotuloVertice = i;
- grafo[i].verticeFechado = false;
- scanf("%d",&idadeFuncionario);
- grafo[i].idadeFuncionario = idadeFuncionario;
- }
- for(int i=0;i<qtdArestas;i++){
- scanf("%d %d",&vertice1,&vertice2);
- vertice1--;
- vertice2--;
- grafo[vertice1].listaArestas.push_back(vertice2);
- grafo[vertice2].rotuloPaiDesteVertice.push_back(vertice1);
- }
- getchar();
- for(int i=0;i<qtdInstrucoes;i++){
- scanf("%c",&instrucao);
- if(instrucao=='P'){
- scanf("%d",&numFuncionario);
- numFuncionario = numFuncionario - 1;
- menorIdade = grafo[numFuncionario].idadeFuncionario;
- while(j < qtdVertices){
- if(!grafo[numFuncionario].verticeFechado &&
- grafo[numFuncionario].rotuloPaiDesteVertice.size() > 0 && j <
- grafo[numFuncionario].rotuloPaiDesteVertice.size()){
- DFS(qtdVertices,grafo[numFuncionario].rotuloPaiDesteVertice[j]);
- }
- j++;
- }
- if(grafo[numFuncionario].rotuloPaiDesteVertice.size()==0){
- printf("*\n");
- }else
- printf("%d\n",menorIdade);
- for(int i=0;i<qtdVertices;i++){
- grafo[i].verticeFechado = false;
- }
- getchar();
- }else if(instrucao=='T'){
- int v1,v2,i,h;
- Grafo aux,aux2;
- scanf("%d %d",&v1,&v2);
- v1-=1;
- v2-=1;
- for(i=0;i<qtdVertices;i++){
- if(grafo[i].rotuloVertice==v1){
- aux = grafo[i];
- break;
- }
- }
- for(h=0;h<qtdVertices;h++){
- if(grafo[h].rotuloVertice==v2){
- aux2 = grafo[h];
- break;
- }
- }
- grafo[h] = aux;
- grafo[i] = aux2;
- getchar();
- }
- j=0;
- }
- for(int i=0;i<qtdVertices;i++){ // serve pra limpa o vector das aresta
- grafo[i].listaArestas.clear();
- }
- getchar();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement