社区讨论
神秘魔改dijkstra求hack
P9126[USACO23FEB] Moo Route II S参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhiz948x
- 此快照首次捕获于
- 2025/11/03 18:08 4 个月前
- 此快照最后确认于
- 2025/11/03 18:08 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
#define inf 1e9+1
const int N=2e5+9;
int n,m,a[N],b[N];
struct edge{int to,s,t;};
vector<edge> e[N];
bool cmp(const edge&a,const edge&b){return a.s<b.s;}
struct node{
int x,d;
bool operator<(const node&tmp)const{return d>tmp.d;}
};
priority_queue<node> q;
int main(){
cin>>n>>m;
while(m--){
int u,s,v,t;cin>>u>>s>>v>>t;
e[u].push_back((edge){v,s,t});
}
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) sort(e[i].begin(),e[i].end(),cmp);
for(int i=2;i<=n;i++) b[i]=inf;
b[1]=-a[1];
q.push((node){1,0});
while(!q.empty()){
int u=q.top().x,d=q.top().d;q.pop();
int l=0,r=e[u].size()-1,res=e[u].size();
while(l<=r){
int mid=(l+r)>>1;
if(e[u][mid].s<d) l=mid+1;
else r=mid-1,res=mid;
}
for(int i=res;i<e[u].size();i++){
int v=e[u][i].to,w=e[u][i].t;
if(w<b[v]){
b[v]=w;
q.push((node){v,w+a[v]});
}
}
}
puts("0");
for(int i=2;i<=n;i++) cout<<(b[i]==inf?-1:b[i])<<endl;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...