比赛 |
20100423 |
评测结果 |
WWWWWWWW |
题目名称 |
聪明的耗子 |
最终得分 |
0 |
用户昵称 |
.Xmz |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2010-04-23 10:38:44 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
using namespace std;
struct edge
{
int t;
edge *next;
}E[2000],*V[100];
int eh;
inline void addedge(int a,int b)
{
E[++eh].next=V[a]; V[a]=E+eh; V[a]->t=b;
E[++eh].next=V[b]; V[b]=E+eh; V[b]->t=a;
}
int n;
void init()
{
scanf("%d",&n);
int a,b,c;
for (int i=1;i<=(3*n/2);i++)
{
scanf("%d%d%d",&a,&b,&c);
if (!c) addedge(a,b);
}
}
bool y[100],yy;
int s[100];
int lo;
void dfs(int u)
{
if (lo==n-1)
{
for (edge *e=V[u];e;e=e->next)
{
if (e->t==1) yy=true;
}
if (yy)
{
printf("1 ");
for (int i=1;i<n-1;i++)
printf("%d ",s[i]);
printf("%d\n",s[n-1]);
}
}
else
for (edge *e=V[u];e;e=e->next)
{
int v=e->t;
if (!y[v])
{
y[v]=true;
lo++;
s[lo]=v;
if (!yy) dfs(v);
y[v]=false;
lo--;
}
}
}
int main()
{
freopen("mousea.in","r",stdin);
freopen("mousea.out","w",stdout);
init();
y[1]=true;
dfs(1);
return 0;
}