| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1283363 | arashmemar | Spy 3 (JOI24_spy3) | C++20 | 11 ms | 3788 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)
{
for (int i = 0;i < k;i++)
{
dac[x[i]] = 1;
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 = 0;i < m;i++)
{
int v = a[i], u = b[i];
long long int c = C[i];
if (dac[i])
{
c = inf;
}
ne[v].push_back({u, c});
ne[u].push_back({v, c});
}
for (int i = 1;i < n;i++)
{
dis[i] = inf * 600;
dij.insert({inf * 600, i});
}
dis[0] = 0;
dij.insert({0, 0});
int cnt = k;
while (dij.size())
{
int v = (*dij.begin()).second;
dij.erase(dij.begin());
if (v)
{
int u = upd[v].first;
long long int c = upd[v].second;
nee[v].push_back({u, {c, cnt}});
nee[u].push_back({v, {c, cnt++}});
}
for (auto o : ne[v])
{
int u = o.first;
long long int c = o.second;
if (dis[u] > dis[v] + c)
{
dij.erase({dis[u], u});
dis[u] = dis[v] + c;
dij.insert({dis[u], u});
upd[u] = {v, c};
}
}
}
string s;
for (int i = 0;i < cnt;i++)
{
s += '0';
}
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 < k;i++)
{
dac[x[i]] = 1;
int v = a[i], u = b[i];
long long int c = C[i];
es.push_back({{v, u}, x[i]});
}
for (int i = 0;i < m;i++)
{
int v = a[i], u = b[i];
long long int c = C[i];
if (dac[i])
{
c = inf;
}
ne[v].push_back({u, {c, i}});
ne[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});
int cnt = k;
while (dij.size())
{
int v = (*dij.begin()).second;
dij.erase(dij.begin());
if (v)
{
int u = upd[v].first;
int ind = upd[v].second;
es.push_back({{v, u}, ind});
}
for (auto o : ne[v])
{
int u = o.first;
long long int c = o.second.first;
int ind = o.second.second;
if (dis[u] > dis[v] + c)
{
dij.erase({dis[u], u});
dis[u] = dis[v] + c;
dij.insert({dis[u], u});
upd[u] = {v, ind};
}
}
}
for (int i = 0;i < s.size();i++)
{
if (s[i] == '1')
{
int v = es[i].first.first, u = es[i].first.second, ind = es[i].second;
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 time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
