Submission #1299500

#TimeUsernameProblemLanguageResultExecution timeMemory
1299500khoalAesthetic (NOI20_aesthetic)C++20
100 / 100
265 ms45324 KiB
#include <iostream> #include <climits> #include <algorithm> #include <queue> #include <fstream> using namespace std; const int N=3e5+5; struct Edge{ int u, v, w; void tie(int &_u, int &_v, int &_w) { _u=u; _v=v; _w=w; } }; struct Node{ int v, w, id; }; Edge edge[N]; vector<Node>g[N]; int n, m, u, v, w, mx[N], num[N], low[N], cnt, ok[N]; long long d1[N], dn[N], res, l, r, mid; void JQK(int S, long long d[]) { priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>>>q; for(int i=1;i<=n;i++) d[i]=LLONG_MAX; d[S]=0; q.push({0,S}); while(!q.empty()) { auto [du,u]=q.top(); q.pop(); if(du!=d[u]) continue; for(auto &e:g[u]) if(d[e.v]>du+e.w) { d[e.v]=du+e.w; q.push({d[e.v],e.v}); } } } vector<int>ans; int dfs(int u, int pr=0) { num[u]=low[u]=++cnt; int cc=(u==n); for(auto &[v,w,id]:g[u]) if(v!=pr&&ok[id]) { if(!num[v]) { int tmp=dfs(v,u); low[u]=min(low[u],low[v]); if(tmp&&num[u]<low[v]) ans.push_back(id); cc|=tmp; } else low[u]=min(low[u],num[v]); } return cc; } int main() { ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0); if(fopen("beautiful.inp", "r")) { freopen("beautiful.inp", "r", stdin); freopen("beautiful.out", "w", stdout); } cin>>n>>m; for(int i=1;i<=m;i++) { cin>>u>>v>>w; edge[i]={u,v,w}; g[u].push_back({v,w,i}); g[v].push_back({u,w,i}); } for(int i=m-1;i;i--) mx[i]=max(edge[i+1].w,mx[i+1]); JQK(1,d1); JQK(n,dn); res=l=d1[n]; r=l+mx[1]; while(l<=r) { mid=(l+r)/2; for(int i=1;i<=m;i++) { edge[i].tie(u,v,w); ok[i]=(min(d1[u]+dn[v],d1[v]+dn[u])+w<mid); } for(int i=1;i<=n;i++) num[i]=low[i]=0; cnt=0; ans.clear(); dfs(1); cnt=!num[n]; for(auto i:ans) { edge[i].tie(u,v,w); cnt|=(min(d1[u]+dn[v],d1[v]+dn[u])+w+mx[i]>=mid); } if(cnt) { l=mid+1; res=mid; } else r=mid-1; } cout<<res; return 0; }

Compilation message (stderr)

Aesthetic.cpp: In function 'int main()':
Aesthetic.cpp:73:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   73 |         freopen("beautiful.inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Aesthetic.cpp:74:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |         freopen("beautiful.out", "w", stdout); }
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...