Submission #1202651

#TimeUsernameProblemLanguageResultExecution timeMemory
1202651LIAAmusement Park (JOI17_amusement_park)C++20
0 / 100
16 ms2116 KiB
// Joi.cpp
#include "Joi.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef tuple<ll, ll, ll> plll;
typedef vector<plll> vplll;
typedef pair<ll, ll> pll;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vector<pll>> vvpll;
typedef vector<vector<ll>> vvll;
typedef vector<bool> vb;
typedef vector<vector<bool>> vvb;
#define loop(i, s, e) for (ll i = (s); i < (e); ++i)
#define loopr(i, e, s) for (ll i = (e)-1; i >= (s); --i)
#define all(a) a.begin(), a.end()
const ll inf = 1e9 + 7;

static vvll g;
static vb vis;
static ll cnt;
static void dfs(ll node) {
  if (cnt == 0) return;
  cnt--;
  MessageBoard(node, 1);
  vis[node] = true;
  for (auto it : g[node]) {
	if (!vis[it]) dfs(it);
  }
}

void Joi(int n, int m, int a[], int b[], long long x, int t) {
  cnt = x;
  g.assign(n, {});
  vis.assign(n, false);

  for (int i = 0; i < m; i++) {
	int ai = a[i], bi = b[i];
	g[ai].push_back(bi);
	g[bi].push_back(ai);
  }
  for (int u = 0; u < n; u++) {
	sort(g[u].begin(), g[u].end());
  }
  dfs(0);
  for (int i = 0; i < n; i++) {
	if (!vis[i]) MessageBoard(i, 0);
  }
}
// Ioi.cpp
#include "Ioi.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef tuple<ll, ll, ll> plll;
typedef vector<plll> vplll;
typedef pair<ll, ll> pll;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vector<pll>> vvpll;
typedef vector<vector<ll>> vvll;
typedef vector<bool> vb;
typedef vector<vector<bool>> vvb;
#define loop(i, s, e) for (ll i = (s); i < (e); ++i)
#define loopr(i, e, s) for (ll i = (e)-1; i >= (s); --i)
#define all(a) a.begin(), a.end()
const ll inf = 1e9 + 7;

static vvll ad;
static vb vis1;
static ll cnt1;

static void dfs(int node) {
  vis1[node] = true;
  for (int nxt : ad[node]) {
	if (!vis1[nxt]) {
	  ll a = Move(nxt);   // go down one edge
	  cnt1+=a;
	  dfs(nxt);
	  ll b = Move(node);  // come right back up one edge
	}
  }
}
long long Ioi(int n, int m, int a[], int b[], int p, int v, int t) {
  // 1) בנה גרף ממויין
  vector<vector<int>> ad(n);
  for(int i=0;i<m;i++){
	ad[a[i]].push_back(b[i]);
	ad[b[i]].push_back(a[i]);
  }
  for(int u=0;u<n;u++) sort(ad[u].begin(), ad[u].end());

  // 2) חשב parent[] ע"י BFS מ־0
  vector<int> parent(n, -1);
  queue<int> q;
  parent[0] = 0;
  q.push(0);
  while(!q.empty()){
	int u = q.front(); q.pop();
	for(int w: ad[u]){
	  if(parent[w] == -1){
		parent[w] = u;
		q.push(w);
	  }
	}
  }

  // 3) העבר מ-p ל-0
  int cur = p;
  while(cur != 0){
	int par = parent[cur];
	Move(par);
	cur = par;
  }

  // 4) אתחל ותחל במסע ה-DFS
  cnt1 = v;
  vis1.assign(n,false);
  dfs(0);

  return cnt1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...