ABC214 C - Distribution(优先队列bfs)
Posted live4m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABC214 C - Distribution(优先队列bfs)相关的知识,希望对你有一定的参考价值。
题意:
解法:
可以将问题抽象成一个最短路问题:
超级源点到每个点的距离为t[i],
点i到点i+1的距离为s[i],
求超级源点到每个点的最短路.
由于对于点i,只有一条去点i+1的边,所以写优先队列+bfs就可以了,
不需要码最短路算法.
code:
#include<bits/stdc++.h>
#define int long long
#define PI pair<int,int>
using namespace std;
const int maxm=2e5+5;
int s[maxm];
int t[maxm];
int mark[maxm];
int n;
void solve(){
cin>>n;
for(int i=1;i<=n;i++)cin>>s[i];
for(int i=1;i<=n;i++)cin>>t[i];
priority_queue<PI,vector<PI>,greater<PI> >q;
for(int i=1;i<=n;i++)q.push({t[i],i});
while(q.size()){
int x=q.top().second;
int y=q.top().first;
q.pop();
if(mark[x])continue;
mark[x]=y;
int nt=x+1;
if(nt==n+1)nt=1;
q.push({mark[x]+s[x],nt});
}
for(int i=1;i<=n;i++)cout<<mark[i]<<endl;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
solve();
return 0;
}
以上是关于ABC214 C - Distribution(优先队列bfs)的主要内容,如果未能解决你的问题,请参考以下文章
ABC214 D - Sum of Maximum Weights(并查集)
AtCoder Beginner Contest 214(补题)