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

    Intervals

    Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 4292    Accepted Submission(s): 1624


    Problem Description
    You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn.

    Write a program that:

    > reads the number of intervals, their endpoints and integers c1, ..., cn from the standard input,

    > computes the minimal size of a set Z of integers which has at least ci common elements with interval [ai, bi], for each i = 1, 2, ..., n,

    > writes the answer to the standard output
     
    Input
    The first line of the input contains an integer n (1 <= n <= 50 000) - the number of intervals. The following n lines describe the intervals. The i+1-th line of the input contains three integers ai, bi and ci separated by single spaces and such that 0 <= ai <= bi <= 50 000 and 1 <= ci <= bi - ai + 1.

    Process to the end of file.

     
    Output
    The output contains exactly one integer equal to the minimal size of set Z sharing at least ci elements with interval [ai, bi], for each i = 1, 2, ..., n.
     
    Sample Input
    5 3 7 3 8 10 3 6 8 1 1 3 1 10 11 1
     
    Sample Output
    6
     
    Author
    1384
     
    需要求S[r]-S[l-1]>=ans,即S[l-1]-S[r]<=-ans。若以r为起点 ,而-ans就为r到l-1的最短路径,即-dist[Maxl-1]。
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<queue>
     4 #include<algorithm>
     5 #define MAXN 50100
     6 using namespace std;
     7 
     8 struct Edge{
     9     int to,nxt,w;
    10 }e[MAXN<<2];
    11 int dis[MAXN],head[MAXN];
    12 bool vis[MAXN];
    13 int cnt,n,l,r;
    14 queue<int>q;
    15 
    16 void init()
    17 {
    18     memset(head,0,sizeof(head));
    19     cnt = 0;
    20     l = 50100;
    21     r = 0;
    22 }
    23 void add(int u,int v,int w)
    24 {
    25     ++cnt;
    26     e[cnt].w = w;
    27     e[cnt].to = v;
    28     e[cnt].nxt = head[u];
    29     head[u] = cnt;
    30 }
    31 void spfa()
    32 {
    33     memset(dis,0x3f,sizeof(dis));
    34     memset(vis,false,sizeof(vis));
    35     q.push(r);
    36     vis[r] = true;
    37     dis[r] = 0;
    38     while (!q.empty())
    39     {
    40         int u = q.front();
    41         q.pop();
    42         for (int i=head[u]; i; i=e[i].nxt)
    43         {
    44             int v = e[i].to;
    45             int w = e[i].w;
    46             if (dis[v]>dis[u]+w)
    47             {
    48                 dis[v] = dis[u]+w;
    49                 if (!vis[v])
    50                 {
    51                     vis[v] = true;
    52                     q.push(v);
    53                 }
    54             }
    55         }
    56         vis[u] = false ;
    57     }
    58     printf("%d
    ",-dis[l-1]);
    59 }
    60 int main()
    61 {
    62     while (scanf("%d",&n)!=EOF)
    63     {
    64         init()
    65         for (int a,b,c,i=1; i<=n; ++i)
    66         {
    67             scanf("%d%d%d",&a,&b,&c);
    68             l = min(l,a);
    69             r = max(r,b);
    70             add(b,a-1,-c);    //b-(a-1)>=c
    71         }
    72         for (int i=l; i<=r; ++i)
    73         {
    74             add(i,i-1,0);    //i-(i-1)>=0
    75             add(i-1,i,1);    //i-(i-1)<=1
    76         }
    77         spfa(); 
    78     } 
    79     return 0;
    80 } 
  • 相关阅读:
    Java中的String为什么是不可变的? -- String源码分析
    理解值和对象-快照图
    线程Thread
    Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?
    不要做一个浮躁的程序员
    关于在springboot中利用@Value注解读取配置文件中的属性值得问题
    Intellij Idea expired
    javascript事件之:谈谈自定义事件
    javascript事件之: 事件冒泡, 事件捕获 ,阻止默认事件
    windows7自带远程连接工具连接不上远程,只有windows服务器版本能连接tsmmc能连接的问题
  • 原文地址:https://www.cnblogs.com/mjtcn/p/7126973.html
Copyright © 2011-2022 走看看