D求hack
  • 板块学术版
  • 楼主Cute_Fish
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/9/28 21:47
  • 上次更新2024/9/29 12:04:24
查看原帖
D求hack
1121412
Cute_Fish楼主2024/9/28 21:47

RT。WA32个点。

赛时想的诡异思路:

每次取编号最小的,如果没赋值就赋值为0,然后将取到最小值的这条边搞一下。

取最小的可以用优先队列维护。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
const int N=5e5+7;
const int inf=9e18;
int n,m,a[N];
struct ask{
    int u,v,w;
    inline bool operator <(const ask &X)const{return min(u,v)>min(X.u,X.v);}
};
priority_queue<ask>q;
signed main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)a[i]=inf;
	for(int i=1;i<=m;i++){
		int u,v,w;cin>>u>>v>>w;
		q.push({u,v,w});
	}
	while(1){
		if(q.empty())break;
		int u=q.top().u,v=q.top().v,w=q.top().w;
		q.pop();
		if(a[min(u,v)]==inf)a[min(u,v)]=0;
		if(min(u,v)==u)a[v]=a[u]+w;
		else a[u]=a[v]-w;
    }
    for(int i=1;i<=n;i++){
    	if(a[i]==inf)cout<<0<<" ";
    	else cout<<a[i]<<" ";
	}
}
2024/9/28 21:47
加载中...