萌新求助差分约束,WAon1
  • 板块UVA1723 Intervals
  • 楼主k2saki
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/2/23 13:55
  • 上次更新2023/11/5 02:50:16
查看原帖
萌新求助差分约束,WAon1
150190
k2saki楼主2021/2/23 13:55

RT。

#include <bits/stdc++.h>
#define int long long
#define ull unsigned long long
#define clr(f, n) memset(f, 0, sizeof(int) * (n))
#define cpy(f, g, n) memcpy(f, g, sizeof(int) * (n))
#define rev(f, n) reverse(f, f + n)
#define pir pair<int, int>
#define mkp make_pair
#define fst it->first
#define sec it->second
#define up(i,x,y) for(int i=x,i##end=y;i<=i##end;++i)
#define down(i,x,y) for(int i=x,i##end=y;i>=i##end;--i)
#define graph(i,x) for(int i=head[x];i;i=nxt[i])
using namespace std;
int n, m, k;
int read()
{
    int s = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
    {
        s = s * 10 + ch - '0';
        ch = getchar();
    }
    return s * f;
}
inline void print(int *f, int len)
{
    for (int i = 0; i < len; i++)
        printf("%lld ", f[i]);
    puts("");
}
const int maxn=1e6+10;
int head[maxn],to[maxn],nxt[maxn],w[maxn],tot;
void add(int a,int b,int c)
{
	to[++tot]=b;
	nxt[tot]=head[a];
	w[tot]=c;
	head[a]=tot;
} 
int s=10100101,t=-100101010;
int dis[maxn],vis[maxn];
int spfa()
{
	memset(dis,0x3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	dis[t]=0;vis[t]=1;
	queue<int>q;
	q.push(t);
	while(!q.empty())
	{
 		int nw=q.front();
		q.pop();
		vis[nw]=0;
		graph(i,nw)
		{
			int v=to[i];
			if(dis[v]>dis[nw]+w[i])
			{
				dis[v]=dis[nw]+w[i];	
				if(!vis[v])vis[v]=1,q.push(v);
			}
		}
	}
	return dis[s];
}
signed main()
{
	int T=read();
	while(T--)
	{
		s=10100101,t=-100101010;
		tot=0;
		memset(head,0,sizeof(head));
		n=read();
		up(i,1,n)
		{
			int x=read(),y=read(),z=read();
			++y;
			add(y,x,-z);
			s=min(x,s);
			t=max(y,t);
		}
		up(i,s,t-1)add(i,i+1,1),add(i+1,i,0);
		cout<<-spfa();
		if(T!=0)cout<<endl;
	}
}
2021/2/23 13:55
加载中...