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

    Intervals

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


    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
     
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<string>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<queue>
    using namespace std;
    #define INF 0xfffffff
    vector<int> e[50001],w[50001];
    queue<int> q;
    int n,dist[50001],r,l,vis[50001];
    void addedge(int a,int b,int c)
    {
          e[b].push_back(a);
          w[b].push_back(c);
    }
    void SPFA()
    {
          int x;
          vis[r]=1;
          q.push(r);
          while(!q.empty())
          {
              x=q.front(),q.pop();
              vis[x]=0;
              for(int i=0;i<e[x].size();i++)
              {
                    if(dist[x]+w[x][i]<dist[e[x][i]])
                    {
                            dist[e[x][i]]=dist[x]+w[x][i];
                            if(!vis[e[x][i]])
                            {
                                  vis[e[x][i]]=1;
                                  q.push(e[x][i]);
                            }
                    }
              }
          }
    }
    int main()
    {
          while(scanf("%d",&n)!=EOF)
          {
                int a,b,c;
                l=INF,r=0;
                for(int i=0;i<50001;i++)
                {
                      vis[i]=0;
                      e[i].clear(),w[i].clear();
                      dist[i]=INF;
                }
                for(int i=0;i<n;i++)
                {
                      scanf("%d%d%d",&a,&b,&c);
                      addedge(a-1,b,-c);
                      if(a<l) l=a;
                      if(b>r) r=b;
                }
                l--;
                for(int i=l;i<r;i++)
                {
                      addedge(i+1,i,1);
                      addedge(i,i+1,0);
                }
                dist[r]=0;
                while(!q.empty()) q.pop();
                SPFA();
                printf("%d
    ",-dist[l]);
          }
          return 0;
    }
    

      

  • 相关阅读:
    Codeforces Round #592 (Div. 2)C. The Football Season(暴力,循环节)
    Educational Codeforces Round 72 (Rated for Div. 2)D. Coloring Edges(想法)
    扩展KMP
    poj 1699 Best Sequence(dfs)
    KMP(思路分析)
    poj 1950 Dessert(dfs)
    poj 3278 Catch That Cow(BFS)
    素数环(回溯)
    sort与qsort
    poj 1952 buy low buy lower(DP)
  • 原文地址:https://www.cnblogs.com/a972290869/p/4245472.html
Copyright © 2011-2022 走看看