zoukankan      html  css  js  c++  java
  • POJ 1201 Intervals

                                                                                                  Intervals
    Time Limit: 2000MSMemory Limit: 65536K
    Total Submissions: 19359Accepted: 7308

    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 end points 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 <= 50000) -- 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 <= 50000 and 1 <= ci <= bi - ai+1.

    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

    Source


    链式前向星SPFA+差分约束

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    #include <vector>

    using namespace std;

    const int MAXN=550000;
    const int INF=0x3f3f3f3f;

    typedef struct
    {
        int next,to,w;
    }Edge;

    int maxv=-1;
    Edge E[MAXN];
    int Size,Adj[MAXN];

    void Init()
    {
        Size=0;
        memset(Adj,-1,sizeof(Adj));
    }

    void Add_Edge(int u,int v,int c)
    {
        E[Size].to=v;
        E[Size].w=c;
        E[Size].next=Adj;
        Adj=Size++;
    }
    int dist[MAXN]; bool inQue[MAXN];
    void SPFA()
    {
        queue<int> q;
        for(int i=0;i<=maxv;i++)
        {
            dist=-INF;
            inQue=false;
        }
        dist[0]=0; inQue[0]=true;
        q.push(0);
        while(!q.empty())
        {
            int u=q.front();
            q.pop();
            for(int i=Adj;~i;i=E.next)
            {
                if(dist+E.w>dist[E.to])
                {
                    dist[E.to]=dist+E.w;
                    if(!inQue[E.to])
                    {
                        inQue[E.to]=true;
                        q.push(E.to);
                    }
                }
            }
            inQue=false;
        }
        printf("%d ",dist[maxv]);
    }

    int main()
    {
        int T;
        scanf("%d",&T);
        Init();
        while(T--)
        {
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            if(b+1>maxv) maxv=b+1;
            Add_Edge(a,b+1,c);
        }
        for(int i=0;i<=maxv;i++)
        {
            Add_Edge(i+1,i,-1);
            Add_Edge(i,i+1,0);
        }
        SPFA();
        return 0;
    }
    * This source code was highlighted by YcdoiT. ( style: Codeblocks )




  • 相关阅读:
    LeetCode 227. Basic Calculator II
    LeetCode 224. Basic Calculator
    LeetCode 103. Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 169. Majority Element
    LeetCode 145. Binary Tree Postorder Traversal
    LeetCode 94. Binary Tree Inorder Traversal
    LeetCode 144. Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/CKboss/p/3350890.html
Copyright © 2011-2022 走看看