# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1224585 | KALARRY | From Hacks to Snitches (BOI21_watchmen) | C++20 | 37 ms | 10056 KiB |
//chockolateman
#include<bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int N,M,K,dist[250005];
vector<int> adj[250005];
pair<int,int> prohibited[250005]; //a mod b
bool visited[250005];
void Dijsktra(int start)
{
for(int i = 1 ; i <= N ; i++)
dist[i] = INF;
dist[start] = 0;
priority_queue<pair<int,int>> q;
q.push({0,start});
while(!q.empty())
{
int v = q.top().second;
q.pop();
if(visited[v])
continue;
visited[v] = true;
for(auto u : adj[v])
{
int w = 1;
if(prohibited[u].second && ((dist[v] + 1)%prohibited[u].second) == prohibited[u].first)
w++;
if(dist[v] + w < dist[u])
{
dist[u] = dist[v] + w;
q.push({-dist[u],u});
}
}
}
}
int main()
{
scanf("%d%d",&N,&M);
for(int a,b,i = 1 ; i <= M ; i++)
{
scanf("%d%d",&a,&b);
adj[a].push_back(b);
adj[b].push_back(a);
}
scanf("%d",&K);
for(int s,i = 1 ; i <= K ; i++)
{
scanf("%d",&s);
for(int l,j = 0 ; j < s ; j++)
{
scanf("%d",&l);
prohibited[l] = {j,s};
}
}
Dijsktra(1);
printf("%d\n",dist[N]);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |