제출 #1283746

#제출 시각아이디문제언어결과실행 시간메모리
1283746arashmemarSpy 3 (JOI24_spy3)C++20
0 / 100
6 ms2764 KiB
#include <bits/stdc++.h>
#include "Aoi.h"

using namespace std;

const int maxn = 2e4 + 100;
const long long int inf = 1e16;

bool dac[maxn];
std::vector <std::pair <int, long long int>> ne[maxn];
vector <pair <int, pair <long long int, int > > > nee[maxn];

std::pair <int, long long int> upd[maxn];

long long int dis[maxn];

std::set <std::pair <long long int, int>> dij;

std::string aoi(int n, int m, int q, int k, std::vector<int> a,
                std::vector<int> b, std::vector<long long> C,
                std::vector<int> t, std::vector<int> x) 
{
	
	string s;

	for (int i = 0;i < m;i++)
	{
		s.push_back('0');
	}

	for (int i = 0;i < m;i++)
	{
		int v = a[i], u = b[i];
		long long int c = C[i];
		nee[v].push_back({u, {c, i}});
		nee[u].push_back({v, {c, i}});
	}

	for (int i = 1;i < n;i++)
	{
		dis[i] = inf * 600;
		dij.insert({inf * 600, i});
	}
	dis[0] = 0;
	dij.insert({0, 0});

	while(dij.size())
	{
		int v = (*dij.begin()).second;
		dij.erase(dij.begin());
		if (v)
		{
			s[upd[v].first] = '1';
		}

		for (auto o : nee[v])
		{
			int u = o.first, ind = o.second.second;
			long long int c = o.second.first;

			if (dis[u] > dis[v] + c)
			{
				dij.erase({dis[u], u});
				dis[u] = dis[v] + c;
				dij.insert({dis[u], u});
				upd[u].first = ind;
			}
		}
	}
	return s;
}
#include <bits/stdc++.h>
#include "Bitaro.h"

using namespace std;

bool mark[20000 + 100];

int ac[20000 + 100];

std::vector <int> p, ans[20000 + 100];

std::vector <pair <int, int>> ne2[20000 + 100];

void dfs(int v)
{
	mark[v] = 1;

	if (ac[v])
	{
		ans[ac[v]] = p;
	}

	for (auto o : ne2[v])
	{
		int u = o.first, ind = o.second;
		if (mark[u])
		{
			continue;
		}
		p.push_back(ind);
		dfs(u);
		p.pop_back();
	}
	return ;
}

void bitaro(int n, int m, int q, int k, std::vector<int> a,
                std::vector<int> b, std::vector<long long> C,
                std::vector<int> t, std::vector<int> x, string s) 
{
const int maxn = 2e4 + 100;
const long long int inf = 1e16;

bool dac[maxn];

vector <pair <int, pair <long long int, int>>> ne[maxn];

std::vector <pair <pair <int, int>, int>> es;

std::pair <int, long long int> upd[maxn];

long long int dis[maxn];

std::set <std::pair <long long int, int>> dij;

	for (int i = 0;i < m;i++)
	{
		es.push_back({{a[i], b[i]}, i});
	}

	for (int i = 0;i < s.size();i++)
	{
		int v = es[i].first.first, u = es[i].first.second, ind = es[i].second;
		if (s[i] == '1')
		{
			ne2[v].push_back({u, ind});
			ne2[u].push_back({v, ind});
		}
	}

	for (int i = 0;i < q;i++)
	{
		ac[t[i]] = i + 1;
	}

	dfs(0);

	for (int i = 1;i <= q;i++)
	{
		answer(ans[i]);
	}
	return ;
}
#Verdict Execution timeMemoryGrader output
Fetching results...