萌新求调简单差分约束题
  • 板块P1645 序列
  • 楼主dk_qwq
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/11/24 17:13
  • 上次更新2023/10/27 01:41:47
查看原帖
萌新求调简单差分约束题
311306
dk_qwq楼主2022/11/24 17:13

WA#3,#9,#10,实在调不出来了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<utility>
#define MP make_pair
#define inf 0x3f3f3f3f
using namespace std;
namespace INPUT{
	char buf[1<<20],*p1,*p2;
	#define gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
}
using namespace INPUT;
template<typename T>
inline T read(){
	T x=0,p=1;
	char ch=gc();
	while(ch<'0'||ch>'9'){
		if(ch=='-') p=-1;
		ch=gc();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<3)+(x<<1)+(ch^48);
		ch=gc();
	}
	return x*p;
}
const int N=1005;
vector<pair<int,int>>G[N];
void add(int u,int v,int w){
	G[u].push_back(MP(v,w));
}
int dis[N];
bool vis[N];
queue<int>q;
void spfa(int s){
	memset(dis,inf,sizeof(dis));
	dis[s]=0;
	q.push(s);
	while(!q.empty()){
		int u=q.front();
		q.pop(),vis[u]=0;
		for(auto ed:G[u]){
			int v=ed.first,w=ed.second;
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				if(!vis[v]) q.push(v),vis[v]=1;
			}
		}
	}
}
int n;
#define R 1000
int main(){
	freopen("data.in","r",stdin);
	n=read<int>();
	for(int i=1;i<=n;i++){
		int l=read<int>();
		int r=read<int>();
		add(r,l-1,-read<int>());
	}
	for(int i=1;i<=R;i++) add(R+1,i,0);
	for(int i=1;i<=R;i++) add(i,i-1,0);
	spfa(R+1);
	int ans=inf;
	for(int i=0;i<=R;i++) ans=min(ans,dis[i]);
	for(int i=0;i<=R;i++) dis[i]-=ans;
	for(int i=0;i<=R;i++) ans=max(ans,dis[i]);
	printf("%d",ans);
}
2022/11/24 17:13
加载中...