Cod sursa(job #934942)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 31 martie 2013 22:55:44
Problema Flux maxim de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.65 kb
#include <fstream>
#include <vector>
#include <cstring>
#define nmax 155
#define oo (1<<30)
#define Vecin G[Nod][i]
using namespace std;

vector <int> G[nmax],Arb[nmax];
int N,Best,Dist[nmax],Queue[nmax];
bool used[nmax];

int Bfs2(int Start) {
	
	int i,Left,Right,Nod;
	
	Queue[Right=1]=Start;
	Dist[Start]=0;
	used[Start]=0;
	
	for(Left=1;Left<=Right;Left++) {
		
		Nod=Queue[Left];
		
		for(i=0;i<Arb[Nod].size();i++)
			if(used[Arb[Nod][i]]) {
				
				Dist[Arb[Nod][i]]=Dist[Nod]+1;
				Queue[++Right]=Arb[Nod][i];
				used[Arb[Nod][i]]=0;
				
				}
		
		}
	
	return Dist[Queue[Right]];
	
}
int Bfs(int Start) {
	
	int i,Left,Right,Nod;
	
	Queue[Right=1]=Start;
	Dist[Start]=0;
	used[Start]=1;
	
	for(Left=1;Left<=Right;Left++) {
		
		Nod=Queue[Left];
		
		for(i=0;i<G[Nod].size();i++)
			if(!used[Vecin]) {
				
				Dist[Vecin]=Dist[Nod]+1;
				Arb[Nod].push_back(Vecin);
				Arb[Vecin].push_back(Nod);
				Queue[++Right]=Vecin;
				used[Vecin]=true;
				
				}
		
		}
	
	return Queue[Right];
	
}
void initialise() {
	
	memset(used,0,sizeof(used));
	
	for(int i=1;i<=N;i++)
		Arb[i].clear();
	
}
void solve() {
	
	int i,Nod;
	
	Best=oo;
	
	for(Nod=1;Nod<=N;Nod++) {
		
		initialise();
		i = Bfs(Nod);
		Best = min(Best,Bfs2(i));
		
		}

}
void read() {

    int x,y,M;
	ifstream in("apdm.in");
	
	in>>N>>M;
	
	while(M--) {
		
		in>>x>>y;
		G[x].push_back(y);
		G[y].push_back(x);
		
		}

    in.close();

}
void write() {

    ofstream out("apdm.out");
	out<<(Best)<<'\n';
    out.close();

}
int main() {

    read();
    solve();
    write();

    return 0;

}