제출 #971670

#제출 시각아이디문제언어결과실행 시간메모리
971670batsukh2006Evacuation plan (IZhO18_plan)C++17
54 / 100
302 ms43860 KiB
#include<iostream> #include<stdio.h> #include<math.h> #include<map> #include<string> #include<algorithm> #include<vector> #include<string.h> #include<utility> #include<set> #include<cmath> #include<queue> #include<deque> #include<functional> #include<stack> #include<limits.h> #include<iomanip> #include<unordered_map> #include<numeric> #include<tuple> #include<bitset> using namespace std; #define MOD 1000000007 #define int long long #define ss second #define ff first #define endl '\n' typedef pair<int,int> pp; signed main(){ // freopen("file.in", "r", stdin); // freopen("file.out", "w", stdout); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m; cin>>n>>m; vector<pp> v[n+1]; for(int i=1; i<=m; i++){ int a,b,w; cin>>a>>b>>w; v[a].push_back({b,w}); v[b].push_back({a,w}); } int k; cin>>k; vector<int> dp(n+1,1e9),mx(n+1); priority_queue<pp,vector<pp>,greater<pp> > q; for(int i=1; i<=k; i++){ int g; cin>>g; q.push({0,g}); dp[g]=0; } vector<bool> vis(n+1); while(!q.empty()){ int w=q.top().ff; int c=q.top().ss; q.pop(); vis[c]=1; if(w<=dp[c]){ for(auto node: v[c]){ if(!vis[node.ff]&&w+node.ss<dp[node.ff]){ dp[node.ff]=w+node.ss; q.push({w+node.ss,node.ff}); } } } } int qry; cin>>qry; if(qry<=1000){ while(qry--){ int s,t; cin>>s>>t; for(int i=1; i<=n; i++) vis[i]=0; for(int i=1; i<=n; i++) mx[i]=-1; priority_queue<pp> e; e.push({dp[s],s}); mx[s]=dp[s]; while(!e.empty()){ int w=e.top().ff; int c=e.top().ss; if(c==t){ cout<<w<<endl; break; } e.pop(); vis[c]=1; if(w>=mx[c]){ for(auto node: v[c]){ if(!vis[node.ff]&&min(dp[node.ff],w)>mx[node.ff]){ mx[node.ff]=min(dp[node.ff],w); e.push({min(dp[node.ff],w),node.ff}); } } } } } }else{ while(qry--){ int s,t; cin>>s>>t; cout<<min(dp[s],dp[t])<<endl; } } return 0; }
#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...