Submission #2980135
Source Code Expand
#include<bits/stdc++.h>
using namespace std;
const int maxn=100005,maxm=200005;
const long long INF=200000000000000ll;
struct A{
int x;
long long d;
A(int x,long long d):x(x),d(d){}
bool operator<(const A &a)const{return d>a.d;}
};
struct node{
long long key,lazy;
bool bad;
int d;
node *lc,*rc;
node(){}
node(long long key):key(key),lazy(0),bad(false),d(0){}
void pushdown(){
if(!lazy)return;
key+=lazy;
lc->lazy+=lazy;
rc->lazy+=lazy;
lazy=0;
}
void refresh(){d=rc->d+1;}
}null[maxm<<1],*ptr=null,*root[maxn];
void Dijkstra(int);
int LCA(int,int);
node *newnode(long long);
node *merge(node*,node*);
long long top(node*&);
vector<int>G[maxn],W[maxn];
vector<node*>v[maxn];
long long d[maxn],ds[maxn];
bool vis[maxn];
long long ans=0;
int p[maxn],depth[maxn],f[maxn][20],q[maxn];
int n,m,s,t;
int main(){
null->key=0x3f3f3f3f3f3f3f3fll;
scanf("%d%d%d%d",&n,&m,&s,&t);
for(int i=0;i<=n;i++)root[i]=null;
while(m--){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
G[x].push_back(y);
W[x].push_back(z);
G[y].push_back(x);
W[y].push_back(z);
}
Dijkstra(s);
memcpy(ds,d,sizeof(d));
Dijkstra(t);
for(int i=1;i<=n;i++)
f[i][0]=p[i];
for(int j=1;(1<<j)<n;j++)
for(int i=1;i<=n;i++)
f[i][j]=f[f[i][j-1]][j-1];
memset(vis,0,sizeof(vis));
for(int x=1;x<=n;x++)
if(d[x]<INF){
for(int i=0;i<(int)G[x].size();i++){
if(!vis[x]&&G[x][i]==p[x]&&W[x][i]==d[x]-d[p[x]]){
vis[x]=true;
continue;
}
root[x]=merge(root[x],newnode(d[G[x][i]]+W[x][i]));
int u=LCA(x,G[x][i]);
v[u].push_back(ptr);
}
}
for(int i=1;i<=n;i++)q[i]=i;
sort(q+1,q+n+1,[](int x,int y){return d[x]>d[y];});
for(int k=1;k<n;k++){
int x=q[k];
for(auto t:v[x])t->bad=true;
ans=max(ans,ds[x]+top(root[x]));
root[x]->lazy+=d[x]-d[p[x]];
root[p[x]]=merge(root[p[x]],root[x]);
}
if(ans>=INF)ans=-1;
printf("%lld\n",ans);
return 0;
}
void Dijkstra(int s){
for(int i=1;i<=n;i++)d[i]=INF;
memset(vis,0,sizeof(vis));
memset(p,0,sizeof(p));
memset(depth,0,sizeof(depth));
d[s]=0;
priority_queue<A>heap;
heap.push(A(s,0));
while(!heap.empty()){
int x=heap.top().x;
heap.pop();
if(vis[x])continue;
vis[x]=true;
depth[x]=depth[p[x]]+1;
for(int i=0;i<(int)G[x].size();i++)
if(!vis[G[x][i]]&&d[G[x][i]]>d[x]+W[x][i]){
d[G[x][i]]=d[x]+W[x][i];
p[G[x][i]]=x;
heap.push(A(G[x][i],d[G[x][i]]));
}
}
}
int LCA(int x,int y){
if(depth[x]!=depth[y]){
if(depth[x]<depth[y])swap(x,y);
int t=depth[x]-depth[y];
for(int i=19;~i;i--)
if((t>>i)&1)x=f[x][i];
}
if(x==y)return x;
for(int i=19;~i;i--)
if(f[x][i]!=f[y][i]){
x=f[x][i];
y=f[y][i];
}
return f[x][0];
}
node *newnode(long long key){
*++ptr=node(key);
ptr->lc=ptr->rc=null;
return ptr;
}
node *merge(node *x,node *y){
if(x==null)return y;
if(y==null)return x;
x->pushdown();
y->pushdown();
if(x->key>y->key)swap(x,y);
x->rc=merge(x->rc,y);
if(x->rc->d>x->lc->d)swap(x->lc,x->rc);
x->refresh();
return x;
}
long long top(node *&x){
while(x!=null&&x->bad){
x->pushdown();
x=merge(x->lc,x->rc);
}
if(x!=null)x->pushdown();
return x->key;
}
Submission Info
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:41:31: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d%d",&n,&m,&s,&t);
^
./Main.cpp:45:27: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d",&x,&y,&z);
^
Judge Result
Set Name |
All |
Score / Max Score |
0 / 100 |
Status |
|
Set Name |
Test Cases |
All |
00_sample_00, 00_sample_01, 00_sample_02, 10_small_0, 10_small_1, 10_small_2, 10_small_3, 10_small_4, 10_small_5, 10_small_6, 10_small_7, 10_small_8, 10_small_9, 20_med_0, 20_med_1, 20_med_2, 20_med_3, 20_med_4, 20_med_5, 20_med_6, 21_med_0, 21_med_1, 21_med_2, 30_large_0, 30_large_1, 30_large_2, 30_large_3, 30_large_4, 30_large_5, 30_large_6, 31_large_0, 31_large_1, 31_large_2, 40_circle_0, 40_circle_1, 40_circle_2, 40_circle_3, 40_circle_4, 41_impossible_0, 41_impossible_1, 41_impossible_2, 42_special_0, 42_special_1, 42_special_10, 42_special_11, 42_special_12, 42_special_13, 42_special_14, 42_special_2, 42_special_3, 42_special_4, 42_special_5, 42_special_6, 42_special_7, 42_special_8, 42_special_9, 43_special_0, 43_special_1, 43_special_2, 43_special_3, 43_special_4, 43_special_5, 43_special_6, 43_special_7, 43_special_8, 43_special_9 |
Case Name |
Status |
Exec Time |
Memory |
00_sample_00 |
AC |
4 ms |
12544 KB |
00_sample_01 |
AC |
4 ms |
12544 KB |
00_sample_02 |
AC |
4 ms |
12544 KB |
10_small_0 |
AC |
4 ms |
12544 KB |
10_small_1 |
AC |
4 ms |
12544 KB |
10_small_2 |
AC |
4 ms |
12544 KB |
10_small_3 |
AC |
4 ms |
12544 KB |
10_small_4 |
AC |
4 ms |
12544 KB |
10_small_5 |
AC |
4 ms |
12544 KB |
10_small_6 |
AC |
4 ms |
12544 KB |
10_small_7 |
WA |
4 ms |
12544 KB |
10_small_8 |
AC |
4 ms |
12544 KB |
10_small_9 |
WA |
4 ms |
12544 KB |
20_med_0 |
WA |
101 ms |
29680 KB |
20_med_1 |
WA |
6 ms |
12800 KB |
20_med_2 |
WA |
41 ms |
17588 KB |
20_med_3 |
WA |
81 ms |
24920 KB |
20_med_4 |
WA |
106 ms |
29640 KB |
20_med_5 |
WA |
115 ms |
28880 KB |
20_med_6 |
WA |
59 ms |
21524 KB |
21_med_0 |
AC |
47 ms |
19632 KB |
21_med_1 |
WA |
115 ms |
28676 KB |
21_med_2 |
AC |
119 ms |
31020 KB |
30_large_0 |
WA |
117 ms |
29168 KB |
30_large_1 |
WA |
29 ms |
14872 KB |
30_large_2 |
WA |
60 ms |
22084 KB |
30_large_3 |
WA |
116 ms |
30292 KB |
30_large_4 |
WA |
63 ms |
20556 KB |
30_large_5 |
WA |
112 ms |
28216 KB |
30_large_6 |
WA |
130 ms |
30516 KB |
31_large_0 |
WA |
79 ms |
22508 KB |
31_large_1 |
AC |
130 ms |
30808 KB |
31_large_2 |
AC |
119 ms |
30340 KB |
40_circle_0 |
WA |
79 ms |
32128 KB |
40_circle_1 |
WA |
78 ms |
32128 KB |
40_circle_2 |
WA |
79 ms |
32128 KB |
40_circle_3 |
WA |
79 ms |
32128 KB |
40_circle_4 |
WA |
79 ms |
32128 KB |
41_impossible_0 |
AC |
320 ms |
42284 KB |
41_impossible_1 |
AC |
305 ms |
42540 KB |
41_impossible_2 |
AC |
300 ms |
42540 KB |
42_special_0 |
WA |
79 ms |
32128 KB |
42_special_1 |
WA |
83 ms |
32128 KB |
42_special_10 |
WA |
110 ms |
34176 KB |
42_special_11 |
WA |
118 ms |
34192 KB |
42_special_12 |
WA |
128 ms |
34240 KB |
42_special_13 |
WA |
157 ms |
34172 KB |
42_special_14 |
WA |
160 ms |
36276 KB |
42_special_2 |
WA |
85 ms |
32128 KB |
42_special_3 |
WA |
89 ms |
32128 KB |
42_special_4 |
WA |
92 ms |
32128 KB |
42_special_5 |
WA |
106 ms |
32128 KB |
42_special_6 |
WA |
104 ms |
32128 KB |
42_special_7 |
WA |
101 ms |
32128 KB |
42_special_8 |
WA |
100 ms |
32128 KB |
42_special_9 |
WA |
102 ms |
32128 KB |
43_special_0 |
WA |
122 ms |
34048 KB |
43_special_1 |
WA |
106 ms |
34048 KB |
43_special_2 |
WA |
107 ms |
34048 KB |
43_special_3 |
WA |
106 ms |
34048 KB |
43_special_4 |
WA |
106 ms |
34048 KB |
43_special_5 |
WA |
106 ms |
33920 KB |
43_special_6 |
WA |
107 ms |
34048 KB |
43_special_7 |
WA |
106 ms |
34048 KB |
43_special_8 |
WA |
106 ms |
34048 KB |
43_special_9 |
WA |
107 ms |
34048 KB |