Cod sursa(job #465946)

Utilizator vladiiIonescu Vlad vladii Data 25 iunie 2010 15:35:34
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define nmax 100010
#define PB push_back
#define MP make_pair
#define PII pair<int, int>

int N, M, viz[nmax];
vector<int> G[nmax];
vector<PII> Move;

void BFS() {
    queue<int> Q;
    int i, p;
    viz[1] = 1;
    Q.push(1);
    while(!Q.empty()) {
         p = Q.front(); Q.pop();
         for(vector<int>::iterator it=G[p].begin(); it!=G[p].end(); it++) {
              if(!viz[*it]) {
                   Move.PB( MP(p, *it) );
                   viz[*it] = 1;
                   Q.push(*it);
              }
         }
    }
}

int main() {
    FILE *f1=fopen("mesaj4.in", "r"), *f2=fopen("mesaj4.out", "w");
    int i, j, p, q;
    fscanf(f1, "%d %d\n", &N, &M);
    for(i=1; i<=M; i++) {
         fscanf(f1, "%d %d\n", &p, &q);
         G[p].PB(q);
         G[q].PB(p);
    }
    
    BFS();

    for(i=1; i<=N; i++) {
         if(!viz[i]) {
              fprintf(f2, "-1\n");
              fclose(f1); fclose(f2);
              return 0;
         }
    }
    
    fprintf(f2, "%d\n", 2 * Move.size());
    for(i=Move.size() - 1; i>=0; i--) {
         fprintf(f2, "%d %d\n", Move[i].second, Move[i].first);
    }
    for(i=0; i<Move.size(); i++) {
         fprintf(f2, "%d %d\n", Move[i].first, Move[i].second);
    }
    fclose(f1); fclose(f2);
    return 0;
}