이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "crocodile.h"
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
#define pb push_back
#define mp make_pair
#define ll long long
const int N=100050;
const int M=1000050;
const ll inf=1e18;
ll fir[N],sec[N];
vector<pair<int,int> > E[N];
int disc[N],tid;
bool mark[N];
void DFS(int u)
{
disc[u]=++tid;
if(mark[u]){ fir[u]=sec[u]=0;return;}
for(int i=0;i<E[u].size();i++)
{
int v=E[u][i].first;
int w=E[u][i].second;
if(!disc[v]) DFS(v);
if(disc[v]>disc[u] || mark[v])
{
if(fir[u]>sec[v]+w) sec[u]=fir[u],fir[u]=sec[v]+w;
else if(sec[u]>sec[v]+w) sec[u]=sec[v]+w;
}
}
}
void AddEdge(int u, int v, int w){ E[u].pb(mp(v,w));E[v].pb(mp(u,w));}
bool was[N];
int travel_plan(int n, int m, int r[][2], int l[], int k, int p[])
{
int i;
for(i=0;i<m;i++) AddEdge(r[i][0]+1,r[i][1]+1,l[i]);
for(i=0;i<k;i++) mark[p[i]+1]=1;
for(i=1;i<=n;i++) fir[i]=sec[i]=inf;
//DFS(1);
priority_queue<pair<ll,int> > pq;
for(i=1;i<=n;i++) if(mark[i])
{
pq.push(mp(0,i));
fir[i]=sec[i]=0;
}
while(pq.size())
{
int u=pq.top().second;
pq.pop();
if(was[u]) continue;
was[u]=1;
for(int i=0;i<E[u].size();i++)
{
int v=E[u][i].first;
int w=E[u][i].second;
if(sec[u]+w<fir[v])
{
sec[v]=fir[v];
fir[v]=sec[u]+w;
pq.push(mp(-sec[v],v));
}
else if(sec[u]+w<sec[v])
{
sec[v]=sec[u]+w;
pq.push(mp(-sec[v],v));
}
}
}
return sec[1];
}
/*int r[M][2],l[M],p[N];
int main()
{
int n,m,k,i;
scanf("%i %i %i",&n,&m,&k);
for(i=0;i<m;i++) scanf("%i %i %i",&r[i][0],&r[i][1],&l[i]);
for(i=0;i<k;i++) scanf("%i",&p[i]);
printf("%i\n",travel_plan(n,m,r,l,k,p));
return 0;
}*/
컴파일 시 표준 에러 (stderr) 메시지
crocodile.cpp: In function 'void DFS(int)':
crocodile.cpp:21:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<E[u].size();i++)
~^~~~~~~~~~~~
crocodile.cpp: In function 'int travel_plan(int, int, int (*)[2], int*, int, int*)':
crocodile.cpp:54:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<E[u].size();i++)
~^~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |