Submission #1366943

#TimeUsernameProblemLanguageResultExecution timeMemory
1366943digitaldreamerPizza Party (CCO24_day1problem2)C++20
0 / 12
492 ms53416 KiB
#include <bits/stdc++.h>

using namespace std;

#define pb push_back
#define mid (l + ((r - l) / 2))
#define F first
#define S second

void solve()
{
	int64_t n, m, x, y, z, p = 1 ;
	cin >> n >> m ;
	vector<int64_t> a(n + 1), an(n + 1) ;
	for(int64_t i = 1 ; i <= n ; i++) cin >> a[i] ;
	vector<vector<pair<int64_t , int64_t>>> adj(n + 1) ;
	for(int64_t i = 1 ; i <= m ; i++)
	{
		cin >> x >> y >> z ;
		adj[x].pb({y , z}), adj[y].pb({x , z}) ;
	}
	
	vector<bool> vs(n + 1) ;
	priority_queue<array<int64_t , 3>> q ;
	for(int64_t i = 1 ; i <= n ; i++) if(a[i] > a[p]) p = i ;
	for(int64_t i = 1 ; i <= n ; i++) if(a[i] == a[p]) q.push({a[i] , i , 0}) ;
	while(q.size() != 0)
	{
		x = q.top()[1], y = q.top()[0], z = q.top()[2], q.pop(), an[x] = max(an[x] , y) ;
		//cout << x << " : " << y << " : " << z << " : " << vs[x] << endl;
		//if(vs[x] == 1) continue ;
		vs[x] = 1 ;
		for(auto it : adj[x])
		{
			if(vs[it.F]) continue ;
			if(a[it.F] >= y - it.S) q.push({a[it.F] , it.F , 0}) ;
			else q.push({y - it.S , it.F , z + it.S}) ;
		}
	}
	for(int64_t i = 1 ; i <= n ; i++) cout << an[i] << endl;
	/*
	 * 	4 5
		6 5 9 2
		1 2 0
		3 2 3
		4 3 6
		1 3 5
		2 4 2
	 */
}


int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int tt = 1 ;
    //cin >> tt;
    while (tt--) solve() ;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...