제출 #81599

#제출 시각아이디문제언어결과실행 시간메모리
81599ToadDaveskiEvacuation plan (IZhO18_plan)C++14
19 / 100
728 ms64680 KiB
#include <bits/stdc++.h> #define ll long long #define fr first #define sc second using namespace std; vector <pair <ll,ll> > v[100001]; ll dp[100001],us[100001],pr[100001]; unordered_set <ll> an[100001]; ll ans[100001]; priority_queue <pair <ll,ll> > q; vector <pair <ll,pair <ll,ll> > > edges; ll dfs(ll x,ll y) { us[x]=-1; if (x==y) return us[x]=dp[y]; ll ans=0; for(auto to : v[x]) { if (us[to.fr]==0) dfs(to.fr,y); if (us[to.fr]>0) ans=max(ans,us[to.fr]); } return us[x]=min(ans,dp[x]); } bool cmp (pair <ll,ll> a, pair <ll,ll> b) { if (a.sc>=b.sc) return 1; return 0; } ll f(ll x) { if (pr[x]==x) return x; else return pr[x]=f(pr[x]); } int main() { ios_base::sync_with_stdio(0); ll n,m,Q,k,i,j; cin>>n>>m; //cout<<3<<endl; for(i=1;i<=n;i++) dp[i]=1e9; for(i=1;i<=m;i++) { ll x,y,z; cin>>x>>y>>z; v[x].push_back({y,z}); v[y].push_back({x,z}); } cin>>k; for(i=1;i<=k;i++) { ll x,y; cin>>x; q.push({0,x}); dp[x]=0; } //cout<<3<<endl; while(!q.empty()) { ll from=q.top().sc; ll weight=-q.top().fr; q.pop(); if (dp[from]<weight) continue; for(auto to : v[from]) { if (dp[to.fr]>dp[from]+to.sc) { dp[to.fr]=dp[from]+to.sc; q.push({-(dp[from]+to.sc),to.fr}); } } } //cout<<3<<endl; cin>>Q; for(i=1;i<=Q;i++) { ll x,y; cin>>x>>y; an[x].insert(i); an[y].insert(i); } for(i=1;i<=n;i++) { pr[i]=i; for(auto to : v[i]) { edges.push_back({min(dp[to.fr],dp[i]),{i,to.fr}}); } } //cout<<edges.size()<<endl; sort(edges.begin(),edges.end()); //cout<<3<<endl; for(i=edges.size()-1;i>=0;i--) { //cout<<i<<endl; ll a=f(edges[i].sc.fr); ll b=f(edges[i].sc.sc); if (a==b) continue; if (an[a].size()<an[b].size()) swap(a,b); for(const int& tod : an[b]) { if (an[a].count(tod)) { ans[tod]=edges[i].fr; an[a].erase(tod); an[b].erase(tod); } else { an[a].insert(tod); } } pr[b]=a; } for(i=1;i<=Q;i++) printf("%d\n", ans[i]); return 0; } /* 9 12 1 9 4 1 2 5 2 3 7 2 4 3 4 3 6 3 6 4 8 7 10 6 7 5 5 8 1 9 5 7 5 4 12 6 8 2 2 4 7 5 1 6 5 3 4 8 5 8 1 5 */

컴파일 시 표준 에러 (stderr) 메시지

plan.cpp: In function 'int main()':
plan.cpp:55:14: warning: unused variable 'y' [-Wunused-variable]
         ll x,y;
              ^
plan.cpp:121:30: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long long int' [-Wformat=]
         printf("%d\n", ans[i]);
                        ~~~~~~^
plan.cpp:40:18: warning: unused variable 'j' [-Wunused-variable]
     ll n,m,Q,k,i,j;
                  ^
#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...