社区讨论

为什么memset127过不了,128能过

P1073[NOIP 2009 提高组] 最优贸易参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhjszsjl
此快照首次捕获于
2025/11/04 08:01
4 个月前
此快照最后确认于
2025/11/04 08:01
4 个月前
查看原帖
rt,差别很大吗,用memset(dis,127,sizeof(dis));memset(dis,127,sizeof(dis));全wa
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
struct lyl{
	int v,w;
};
vector<lyl> g[500010];
void add(int u,int v){
	g[u].push_back({v,0});
	g[u+n].push_back({v+n,0});
	g[u+2*n].push_back({v+2*n,0});
}
int w[500010],vis[500010],dis[500010];
queue<int> q;
void spfa(){
	memset(dis,128,sizeof(dis));
	q.push(1);
	dis[1]=0;
	vis[1]=1;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(auto [v,w]:g[u]){
			if(dis[v]<dis[u]+w){
				dis[v]=dis[u]+w;
				if(!vis[v]){
					vis[v]=1;
					q.push(v);
				}
			}
		}
	}
	return ;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>w[i];
		g[i].push_back({i+n,-w[i]});
		g[i+n].push_back({i+2*n,w[i]});
	}
	for(int i=1;i<=m;i++){
		int u,v,op;
		cin>>u>>v>>op;
		--op;
		add(u,v);
		if(op)add(v,u);
	}
	spfa();
	cout<<max(dis[n],dis[3*n]);
}

回复

2 条回复,欢迎继续交流。

正在加载回复...