답안 #237296

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
237296 2020-06-05T18:06:56 Z limabeans Amusement Park (JOI17_amusement_park) C++17
8 / 100
45 ms 6308 KB
#include "Joi.h"
#include <bits/stdc++.h>
using namespace std;

template<typename T>
void out(T x) { cout << x << endl; exit(0); }
#define watch(x) cout << (#x) << " is " << (x) << endl




typedef long long ll;
const int maxn = 10005;


static vector<int> g[maxn];
static vector<int> path;
static bool viz[maxn];

// void MessageBoard(int attr, int msg) {
// }

static void dfs(int at) {
    path.push_back(at);
    viz[at]=true;
    for (int to: g[at]) {
	if (viz[to]) continue;
	dfs(to);
	path.push_back(at);
    }
}

void Joi(int n, int m, int a[], int b[], long long x, int t) {
    for (int i=0; i<=n; i++) {
	g[i].clear();
    }
    path.clear();
    memset(viz,false,sizeof(viz));
    
    for (int i=0; i<m; i++) {
	g[a[i]].push_back(b[i]);
	g[b[i]].push_back(a[i]);
    }
    for (int i=0; i<n; i++) {
	sort(g[i].begin(), g[i].end());
    }
    dfs(0);
    memset(viz,false,sizeof(viz));
    ll j=0;
    for (int at: path) {
	if (viz[at]) continue;
	viz[at]=true;
	MessageBoard(at, x>>j&1);
	j++;
    }
}
#include "Ioi.h"
#include <bits/stdc++.h>
using namespace std;

template<typename T>
void out(T x) { cout << x << endl; exit(0); }
#define watch(x) cout << (#x) << " is " << (x) << endl




typedef long long ll;
const ll mod = 1e9+7;
const int maxn = 10005;
const int inf = 1e9;

static set<int> g[maxn];
static vector<int> path;
static bool viz[maxn];
int nodes;


// int Move(int dest) {
//     cout<<"Move: "<<dest<<endl;
//     return 1;
// }

static void dfs(int at) {
    path.push_back(at);
    viz[at]=true;
    for (int to: g[at]) {
	if (viz[to]) continue;
	dfs(to);
	path.push_back(at);
    }
}


vector<int> dij(int src) {
    int n = nodes;
    vector<int> dist(n, inf);
    vector<int> par(n, -1);
    dist[src] = 0;

    queue<int> qq;
    qq.push(src);
    while (qq.size()) {
	int at = qq.front();
	qq.pop();
	for (int to: g[at]) {
	    if (dist[to]>1+dist[at]) {
		dist[to]=1+dist[at];
		par[to]=at;
		qq.push(to);
	    }
	}
    }

    vector<int> res;
    int at = 0;
    while (at != src) {
	res.push_back(at);
	at=par[at];
    }
    reverse(res.begin(), res.end());
    return res;
}


long long Ioi(int n, int m, int a[], int b[], int p, int v, int t) {
    nodes = n;
    for (int i=0; i<=n; i++) {
	g[i].clear();
    }
    path.clear();
    memset(viz,false,sizeof(viz));
    
    for (int i=0; i<m; i++) {
	g[a[i]].insert(b[i]);
	g[b[i]].insert(a[i]);
    }

    int cur=p;
    vector<int> pathto0 = dij(cur);
    for (int x: pathto0) {
	assert(g[cur].count(x));
	assert(x!=-1);
	Move(x);
	cur=x;
    }

    assert(cur==0);
    int to=*g[cur].begin();
    Move(to);
    cur=to;

    dfs(0);
    memset(viz,false,sizeof(viz));

    // for (int x: path) {
    // 	cout<<x<<" ";
    // }
    // cout<<endl;
    
    ll j=0;
    ll ans = 0;
    for (int nxt: path) {
	assert(g[cur].count(nxt));
	ll val = Move(nxt);
	cur=nxt;
	if (viz[nxt]) {
	    continue;
	}
	viz[nxt]=true;
	if (j>=60) {
	    continue;
	}

	ans = ans | (val<<j);
	j++;
    }
    
    return ans;
}



// int main() {
//     //long long Ioi(int n, int m, int a[], int b[], int p, int v, int t) {
//     int a[] = {0,1,2,2};
//     int b[] = {1,2,0,3};
//     ll res  = Ioi(4,4,a,b,3,0,0);
//     watch(res);
//     return 0;
// }
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 1540 KB Output is correct
2 Correct 10 ms 1792 KB Output is correct
3 Correct 10 ms 1772 KB Output is correct
4 Correct 10 ms 1796 KB Output is correct
5 Correct 10 ms 1768 KB Output is correct
6 Correct 10 ms 1772 KB Output is correct
7 Correct 10 ms 1768 KB Output is correct
8 Correct 10 ms 1764 KB Output is correct
9 Correct 10 ms 1680 KB Output is correct
10 Correct 10 ms 1780 KB Output is correct
11 Correct 16 ms 2412 KB Output is correct
12 Correct 10 ms 1764 KB Output is correct
13 Correct 10 ms 1752 KB Output is correct
14 Correct 10 ms 1780 KB Output is correct
15 Correct 10 ms 1780 KB Output is correct
16 Correct 10 ms 1780 KB Output is correct
17 Correct 10 ms 1680 KB Output is correct
18 Correct 10 ms 1680 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 45 ms 6012 KB Wrong Answer [8]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 1640 KB Output is correct
2 Correct 10 ms 1772 KB Output is correct
3 Incorrect 10 ms 1660 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 45 ms 6308 KB Wrong Answer [8]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 45 ms 6028 KB Wrong Answer [8]
2 Halted 0 ms 0 KB -