Cod sursa(job #124332)

Utilizator azotlichidAdrian Vladu azotlichid Data 18 ianuarie 2008 20:58:52
Problema Dusman Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <cstring>
using namespace std;

#define ALL(x) (x).begin(), (x).end()
#define CLEAR(X) (memset(X, 0, sizeof(X)))
#define FORI(it, x) for (__typeof((x).begin()) it = (x).begin(); it != (x).end(); ++it)
#define FOR(i, N, M) for (int i = (int)(N); i <= (int)(M); ++i)
#define REP(i, N) for (int i = 0; i < (int)(N); ++i)
#define SIZE(X) (int)((X).size())
#define TIPA(a, i) (cerr << #a << "[" #i " = " << (i) << "] = " << (a)[i] << endl)
#define TIP(x) (cerr << #x << " = " << (x) << endl)

#define MP make_pair
#define PB push_back
#define INF 0x3F3F3F3F

typedef long long LL;

#define NMAX 1024

int N, M, K, a, b;
list<int> adj[NMAX];
int p[NMAX], u[NMAX];

int ok(int a, int b)
{
	FORI(it, adj[a]) if (*it == b) return 0;
	return 1;
}

void dfs(int x)
{
	if (x == N+1) 
	{
		if ((--K) == 0)
		{
			printf("%d", p[1]);
			FOR(i, 2, N) printf(" %d", p[i]);
			printf("\n");
            exit(0);
		}
	}
	else
	{
		FOR(i, 1, N) if (!u[i] && ok(p[x-1], i))
		{
			u[i] = 1, p[x] = i;
			dfs(x+1);
			u[i] = 0;
		}
	}
}

int main(void)
{
    freopen("dusman.in", "r", stdin);
    freopen("dusman.out", "w", stdout);
	scanf("%d %d %d", &N, &K, &M);
	REP(i, M)
	{
		scanf("%d %d", &a, &b);
		adj[a].PB(b), adj[b].PB(a);
	}

	memset(u, 0, sizeof(u));
	p[0] = 0;
	dfs(1);
    return 0;
}