zoukankan      html  css  js  c++  java
  • HDU 1384 Intervals &洛谷[P1250]种树

    差分约束

    差分约束的裸题,关键在于如何建图
    我们可以把题目中给出的区间端点作为图上的点,此处应注意,由于区间中被标记的点的个数满足区间加法,这里与前缀和类似,对于区间[L..R]来说,我们加入一条从L-1指向R的边,边权为ci。
    这样还不够,因为这样建下来的图是离散的,我们还需要去挖掘题目中的隐藏条件,我们可以发现,区间[L..L]的c值大于零小于一,所以我们可以加入adde(L-1,L,0);adde(L,L-1,-1);
    按理来说差分约束的题需要构造一个源点以防图不连通,但由于本题的隐含条件,保证图一定联通,所以不需加入源点。但是要把所有的点首先加入队列

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <queue>
    using namespace std;
    const int MAXN=300005;
    int init(){
    	int rv=0,fh=1;
    	char c=getchar();
    	while(c<'0'||c>'9'){
    		if(c=='-') fh=-1;
    		c=getchar();
    	}
    	while(c>='0'&&c<='9'){
    		rv=(rv<<1)+(rv<<3)+c-'0';
    		c=getchar();
    	}
    	return fh*rv;
    }
    int n,head[MAXN],dis[MAXN],nume,L,R;
    struct edge{
    	int to,nxt,dis;
    }e[MAXN];
    void adde(int from,int to,int dis){
    	e[++nume].to=to;
    	e[nume].nxt=head[from];
    	e[nume].dis=dis;
    	head[from]=nume;
    }
    void SPFA(){
    	queue<int> q;
    	for(int i=head[0];i;i=e[i].nxt) q.push(e[i].to);
    	while(!q.empty()){
    		int u=q.front();q.pop();
    		for(int i=head[u];i;i=e[i].nxt){
    			int v=e[i].to;
    			if(dis[v]<dis[u]+e[i].dis){
    				dis[v]=dis[u]+e[i].dis;
    				q.push(v);
    			}
    		}
    	}
    }
    int main(){
    	freopen("in.txt","r",stdin);
    	while(~scanf("%d",&n)){
    		memset(dis,0,sizeof(dis));
    		memset(head,0,sizeof(head));
    		memset(e,0,sizeof(e));
    		nume=0;
    		R=0,L=99999999;
    		for(int i=1;i<=n;i++){
    		int u=init(),v=init(),di=init();
    		if(u!=1) adde(0,u-1,0);
    		adde(u-1,v,di);
    		R=max(R,v);
    		L=min(L,u-1);
    	}
    	for(int i=L;i<R;i++){
    		adde(i,i+1,0);
    		adde(i+1,i,-1);
    	}
    	SPFA();
    	//for(int i=1;i<=20;i++) cout<<dis[i]<<endl;
    	cout<<dis[R]<<endl;
    	}
    	
    	fclose(stdin);
    	return 0;
    }
    
  • 相关阅读:
    软件体系架构复习要点
    Operating System on Raspberry Pi 3b
    2019-2020 ICPC North-Western Russia Regional Contest
    2019 ICPC ShenYang Regional Online Contest
    2019 ICPC XuZhou Regional Online Contest
    2019 ICPC NanChang Regional Online Contest
    2019 ICPC NanJing Regional Online Contest
    Codeforces Edu Round 72 (Rated for Div. 2)
    Codeforces Round #583 (Div.1+Div.2)
    AtCoder Beginning Contest 139
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/8116593.html
Copyright © 2011-2022 走看看