zoukankan      html  css  js  c++  java
  • 【POJ1201】Intervals【差分约束】

    题目大意:

    题目链接:http://poj.org/problem?id=1201
    0500000sim50000中选择尽量少的数字使得nn组形如“xxyy中选择的数字不少于ckc_k个”的要求全部满足。


    思路:

    sis_i表示从0i0sim i中选择的数字个数。那么对于任意一个要求x,y,ckx,y,c_k,都需要满足sy+1sxcks_{y+1}-s_xgeq c_k,与差分约束十分相像。于是从yy连向xx一条长度为ckc_k的边。
    同时我们对于数字ii,肯定是要么选择,要么不选。所以本题中还有两个隐含条件sksk10s_k-s_{k-1}geq 0sksk11s_k-s_{k-1}leq 1
    对于条件1,可以直接从k1k-1kk连一条长度为0的边,对于条件2,变形得sksk11s_k-s_k-1geq -1,从kkk1k-1连一条长度为-1的边。
    由于不等式符号全部是大于,所以需要跑最长路。很明显图中是不含正环的,所以可以不用判正环。以-1为源点跑spfaspfa即可。答案即为dis[50000]dis[50000]
    但是下标是不可以用负数的。所以可以把所有点的下标+1,变成“从1500011sim50001”中选择,从0开始跑spfaspfa,答案就是dis[50001]dis[50001]


    代码:

    #include <cstdio>
    #include <queue>
    #include <cstring>
    using namespace std;
    
    const int N=50010;
    int n,x,y,z,tot,head[N],dis[N];
    bool vis[N];
    
    struct edge
    {
    	int next,to,dis;
    }e[N*3];
    
    void add(int from,int to,int dis)
    {
    	e[++tot].to=to;
    	e[tot].dis=dis;
    	e[tot].next=head[from];
    	head[from]=tot;
    }
    
    void spfa()
    {
    	memset(dis,0xcf,sizeof(dis));
    	queue<int> q;
    	q.push(0);
    	dis[0]=0;
    	vis[0]=1;
    	while (q.size())
    	{
    		int u=q.front(),v;
    		q.pop();
    		vis[u]=0;
    		for (int i=head[u];~i;i=e[i].next)
    		{
    			v=e[i].to;
    			if (dis[v]<dis[u]+e[i].dis)
    			{
    				dis[v]=dis[u]+e[i].dis;
    				if (!vis[v])
    				{
    					vis[v]=1;
    					q.push(v);
    				}
    			}
    		}
    	}
    }
    
    int main()
    {
    	memset(head,-1,sizeof(head));
    	scanf("%d",&n);
    	for (int i=1;i<=n;i++)
    	{
    		scanf("%d%d%d",&x,&y,&z);
    		add(x+1,y+2,z);
    	}
    	for (int i=1;i<=50001;i++)
    		add(i-1,i,0),add(i,i-1,-1);
    	spfa();
    	printf("%d
    ",dis[50001]);
    	return 0;
    }
    
  • 相关阅读:
    Delphi XE4 FireMonkey 开发 IOS APP 发布到 AppStore 最后一步.
    Native iOS Control Delphi XE4
    Delphi XE4 iAD Framework 支持.
    using IOS API with Delphi XE4
    GoF23种设计模式之行为型模式之命令模式
    Android青翼蝠王之ContentProvider
    Android白眉鹰王之BroadcastReceiver
    Android倚天剑之Notification之亮剑IOS
    Android紫衫龙王之Activity
    GoF23种设计模式之行为型模式之访问者模式
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998315.html
Copyright © 2011-2022 走看看