QOJ.ac

QOJ

ID提交记录ID题目HackerOwner结果提交时间测评时间
#1581#914621#9352. Highway Busesrotcar08wdnmdwrnmmpSuccess!2025-03-05 13:03:012025-03-05 13:03:01

详细

Extra Test:

Time Limit Exceeded

input:

200000 199999 2
200000 1 0
200000 2 0
200000 3 0
200000 4 0
200000 5 0
200000 6 0
200000 7 0
200000 8 0
200000 9 0
200000 10 0
200000 11 0
200000 12 0
200000 13 0
200000 14 0
200000 15 0
200000 16 0
200000 17 0
200000 18 0
200000 19 0
200000 20 0
200000 21 0
200000 22 0
200000 23 0
200000 24 0
20000...

output:


result:


ID题目提交者结果用时内存语言文件大小提交时间测评时间
#914621#9352. Highway BuseswdnmdwrnmmpTL 1037ms30220kbC++14879b2025-02-25 16:05:252025-03-05 13:06:53

answer

#include<bits/stdc++.h>
using namespace std;const int N=2e5+5;using ll=long long;int tid,T,n,m,q,d[N],c[N],w[N],g[N];ll ans[N],f[N];
vector<int>v[N];priority_queue<pair<ll,int>>pq;
void dfs(int u,int dis,ll val){if(dis<=g[u])return;
	if(g[u]==-1)f[u]=val,pq.push({-val-c[u],u});g[u]=dis;for(auto i:v[u])dfs(i,dis-1,val);
}
void sol(){memset(f,0x3f,sizeof(f)),memset(g,-1,sizeof(g)),g[1]=f[1]=0,pq.push({-c[1],1});
	while(!pq.empty()){int u=pq.top().second;pq.pop(),dfs(u,d[u],f[u]+c[u]);}
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	T=1;
	while(T--){cin>>n>>m>>q;for(int i=1;i<=n;i++)cin>>d[i]>>c[i]>>w[i];
		for(int x,y,i=1;i<=m;i++)cin>>x>>y,v[x].push_back(y),v[y].push_back(x);
		sol();for(int i=1;i<=n;i++)ans[i]=f[i],c[i]+=(q-1)*w[i];
		sol();for(int i=1;i<=n;i++)ans[i]=min(ans[i],f[i]);
		for(int i=1;i<=n;i++)cout<<ans[i]<<'\n';
	}
}