zoukankan      html  css  js  c++  java
  • poj 1201 Intervals——差分约束裸题

    题目:http://poj.org/problem?id=1201

    差分约束裸套路:前缀和

    本题可以不把源点向每个点连一条0的边,可以直接把0点作为源点。这样会快许多!

      可能是因为 i-1 向 i 都连着一条0的边。

    别忘了约束条件不仅有s[ i ] - s[ i-1 ] >= 0,还有s[ i ] - s[ i - 1] <= 1!

    别忘了s的范围不是n而是mx!

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    const int N=5e4+5;
    int n,hd[N],xnt,dis[N],mx;
    bool vis[N];
    queue<int> q;
    struct Ed{
      int nxt,to,w;
      Ed(int n=0,int t=0,int w=0):nxt(n),to(t),w(w) {}
    }ed[N<<2];
    void add(int x,int y,int z)
    {
      ed[++xnt]=Ed(hd[x],y,z);hd[x]=xnt;
    }
    void spfa()
    {
      memset(dis,-2,sizeof dis);dis[0]=0;
      q.push(0);vis[0]=1;
      while(q.size())
        {
          int k=q.front();q.pop();vis[k]=0;
          for(int i=hd[k],v;i;i=ed[i].nxt)
        if(dis[k]+ed[i].w>dis[v=ed[i].to])
          {
            dis[v]=dis[k]+ed[i].w;
            if(!vis[v])vis[v]=1,q.push(v);
          }
        }
    }
    int main()
    {
      scanf("%d",&n);int x,y,z;
      for(int i=1;i<=n;i++)
        {
          scanf("%d%d%d",&x,&y,&z);
          add(x-1,y,z);mx=max(mx,y);
        }
      for(int i=0;i<mx;i++)add(i,i+1,0),add(i+1,i,-1);
      spfa();printf("%d",dis[mx]);
      return 0;
    }
  • 相关阅读:
    Linux rcp命令详解
    Linux patch命令详解
    Linux paste命令详解
    linux od命令详解
    linux mv命令详解
    Linux more命令详解
    Linux mktemp命令
    MySQL状态变量详解
    mysql性能分析show profile/show profiles
    MySQL执行计划
  • 原文地址:https://www.cnblogs.com/Narh/p/9278457.html
Copyright © 2011-2022 走看看