• poj1201 查分约束系统


    oj1201 查分约束系统
    和1716是同一类题目,求出包含区间中至少c个数的最小集合,建立约束图,就最长路径,把所有的符号转化为>=,利用spfa求解,这个题不能用bellman_ford,会超时。
    #include <iostream>
    #include <stdio.h>
    #include <queue>
    using namespace std;
    const int N=50002;
    const int INF=100000;
    struct node{
        int to,w,next;
    };
    node edge[N*3];
    int n,num,maxb,dist[N],adj[N];
    bool visit[N];
    void spfa()
    {
        memset(visit,0,sizeof(visit));
        memset(dist,0,sizeof(dist));
        int i,u,v,c;
        queue<int> q;
        for(i=0;i<=maxb;i++)
        {
            q.push(i); //将所有的顶点入队列
            visit[i]=true;
        }
        while(!q.empty())
        {
            u=q.front();
            q.pop();
            visit[u]=false;
            for(i=adj[u];i!=-1;i=edge[i].next)
            {
                v=edge[i].to;
                c=edge[i].w;
                if(dist[u]+c>dist[v])
                {
                    dist[v]=dist[u]+c;
                    if(!visit[v])
                    {
                    //    cout<<v<<endl;
                        q.push(v);
                        visit[v]=true;
                    }
                }
            }
        }
        printf("%d\n",dist[maxb]-dist[0]);
    }
    int main()
    {
        int i,u,v,c;
        scanf("%d",&n);
        num=0;
        maxb=-INF;
        memset(adj,-1,sizeof(adj));
        node tmp;
        for(i=0;i<n;i++)
        {
            scanf("%d%d%d",&u,&v,&c);
            maxb=(maxb<(v+1))?(v+1):maxb;
            tmp.to=v+1;
            tmp.w=c;
            tmp.next=adj[u];
            edge[num]=tmp;
            adj[u]=num++;
        }
        for(i=0;i<maxb;i++)
        {
            tmp.to=i+1;
            tmp.w=0;
            tmp.next=adj[i];
            edge[num]=tmp;
            adj[i]=num++;

            tmp.to=i;
            tmp.w=-1;
            tmp.next=adj[i+1];
            edge[num]=tmp;
            adj[i+1]=num++;
        }
        spfa();
        return 0;
    }

  • 相关阅读:
    【转】js 获取浏览器高度和宽度值(多浏览器)
    Css相册
    微信公众号开发笔记2-自定义菜单
    微信公众号开发笔记1-获取Access Token
    【转】CSS选择器笔记
    【转】CSS浮动(float,clear)通俗讲解
    高云的jQuery源码分析笔记
    经典闭包例子详解
    执行控制——节流模式
    图片上下左右的无缝滚动的实现
  • 原文地址:https://www.cnblogs.com/buptLizer/p/2173409.html
Copyright © 2020-2023  润新知