Problem 1108 : A Long Ride on a Railway

問題概要

無向グラフで表せる鉄道網与えられる。
このとき、ある駅から出発して、同じ線路を2度以上とおらないようなパスのうち、最も長さの長いパスを出力せよ。
同じ駅は何度通ってもよいものとする。


駅の数は10以下、線路の数は20以下である。

解法

線路の数、駅の数ともに少ないので、全探索で十分間に合う。

ソースコード

int n,m;
vector<vector<pi> >e;
bool use[11][11];
int mxl; vi ans,tmp;

void dfs(int c,int s)
{
	bool f=1;
	tmp.pb(c);
	fr(i,e[c])
	{
		int h=c,t=i->first;
		if(h>t)swap(h,t);
		if(use[h][t])continue;
		use[h][t]=1;
		dfs(i->first,s+i->second);
		f=use[h][t]=0;
	}
	if(f)
	{
		if(mxl<s||mxl==s&&ans>tmp)
		mxl=s,ans=tmp;
	}
	tmp.pop_back();
}
int main()
{
	while(scanf("%d%d",&n,&m),n)
	{
		e.clear(); e.resize(n+1);
		ans.clear(); ans.pb(inf);
		rep(i,m)
		{
			int a,b,c; scanf("%d%d%d",&a,&b,&c);
			e[a].pb(mp(b,c)); e[b].pb(mp(a,c));
		}
		mxl=0;
		for(int i=1;i<=n;i++)
		{
			rep(j,11)rep(k,11)use[i][j]=0;
			tmp.clear(); dfs(i,0);
		}
		printf("%d\n",mxl);
		int na=ans.size();
		rep(i,na)printf("%d%c",ans[i],i==na-1?'\n':' ');
	}
	return 0;
}