zoukankan      html  css  js  c++  java
  • Intervals (spfa+差分约束)

    http://acm.hdu.edu.cn/showproblem.php?pid=1384

     1 #include <iostream>
     2 #include <cstring>
     3 #include <queue>
     4 #include <cstdio>
     5 using namespace std;
     6 const int N = 50000+10;
     7 const int INF = 1<<27;
     8 int n,max_n,min_n,cnt;
     9 bool vis[N];
    10 int dis[N];
    11 int root[N];
    12 struct node{
    13     int v,next,dis;
    14 }eg[4*N];
    15 void add(int u,int v,int w)
    16 {
    17     eg[cnt].v=v;
    18     eg[cnt].next=root[u];
    19     eg[cnt].dis=w;
    20     root[u]=cnt++;
    21 }
    22 bool relax(int u,int v,int w)
    23 {
    24     if(dis[v]<dis[u]+w)
    25     {
    26         dis[v]=dis[u]+w;
    27         return 1;
    28     }
    29     return 0;
    30 }
    31 void spfa()
    32 {
    33     int i;
    34     for(i=min_n;i<=max_n;i++)
    35     {
    36         dis[i]=-INF;vis[i]=0;
    37     }
    38     dis[min_n]=0;vis[min_n]=1;
    39     queue<int> q;
    40     q.push(min_n);
    41     while(!q.empty())
    42     {
    43         int u=q.front();
    44         q.pop();vis[u]=0;
    45         for(i=root[u];i!=-1;i=eg[i].next)
    46         {
    47             int v=eg[i].v;
    48             int d=eg[i].dis;
    49             if(relax(u,v,d)&&!vis[v])
    50             {
    51                 vis[v]=1;
    52                 q.push(v);
    53             }
    54         }
    55     }
    56 }
    57 int main()
    58 {
    59     int u,v,w,i;
    60     while(cin>>n)
    61     {
    62         max_n=-INF;min_n=INF;cnt=0;
    63         memset(root,-1,sizeof(root));
    64         for(i=0;i<n;i++)
    65         {
    66             scanf("%d%d%d",&u,&v,&w);
    67             u++;v++;
    68             max_n=max(max_n,v);
    69             min_n=min(min_n,u-1);
    70             add(u-1,v,w);
    71         }
    72         for(i=min_n;i<=max_n;i++)//0<=dis[i]-dis[i-1]<=1
    73         {
    74             add(i,i-1,-1);
    75             add(i-1,i,0);
    76         }
    77         spfa();
    78         cout<<dis[max_n]<<endl;
    79     }
    80     return 0;
    81 }
  • 相关阅读:
    MongoDB 连接
    MongoDB 概念解析
    Linux平台安装MongoDB
    window平台安装MongoDB
    MongoDB 简介
    NoSQL 简介
    Docker有用的资源
    Docker常见仓库Redis
    Docker常见仓库MongoDB
    微信小程序
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2591134.html
Copyright © 2011-2022 走看看