Cod sursa(job #767071)

Utilizator lucian666Vasilut Lucian lucian666 Data 12 iulie 2012 17:57:53
Problema Salvare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb


#include<fstream>
#include<vector>

#define pb push_back
#define INF 0x3f3f3f3f
#define NN 1001

using namespace std;
ofstream out("salvare.out");

typedef vector<int>:: iterator IT;
vector<int>sol;
vector<int>G[NN];

int d[NN],uz[NN],n,k,a[NN][NN];

void read();
void DFS(int );
void solve();

int main()
{
	read();
	solve();
	int poz=-1,mm=INF;;
	memset(uz,0,sizeof(uz));
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(a[i][j] < mm && a[i][j] )
			{
				mm=a[i][j];
				poz=i;
			}
			uz[poz]=1;
			sol.pb(poz);
			for(int j=1;j<=n;j++)
				if(a[1][j] ==1 && !uz[j] )
					uz[j]=1;
				for(int i=2;i<=n;i++)
					for(int j=1;j<=n;j++)
						if(a[i][j] == 1 && !uz[j] )
						{
							sol.pb(i);
							uz[j]=1;
						}
						out<<mm<<'\n';
						for(IT I=sol.begin();I!=sol.end();++I)
							out<<*I<<" ";
	return 0;
}

void read()
{
	ifstream in("salvare.in");
	in>>n;
	in>>k;
	for(int x,y,i=1;i<n;i++)
	{
		in>>x>>y;
		G[x].pb(y);
		G[y].pb(x);
	}
}

void DFS(int start)
{
	uz[start]=1;
		for(IT I=G[start].begin();I!=G[start].end();++I)
			if(!uz[*I])
			{
				d[*I]=d[start]+1;
				DFS(*I);
			}
}

void solve()
{
	for(int i=1;i<=n;i++)
	{
		int k=0;
		memset(uz,0,sizeof(uz));
		memset(d,INF,sizeof(d));
		d[i]=0;
		DFS(i);
		for(int j=1;j<=n;j++)
			a[i][++k]=d[j];
		
	}
}