zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    k-means聚类JAVA实例
    钓鱼站点以世界杯足球赛为饵,收集个人资料
    南桥--特殊回文数
    Oracle 数据文件管理
    hihoCoder #1142 : 三分求极值
    时间复杂度和空间复杂度[数据结构]
    poj 3635 Full Tank? ( 图上dp )
    FastQC结果详解
    毕业设计常见问题
    centos 查看USB接口的版本
  • 原文地址:https://www.cnblogs.com/buptLizer/p/2173409.html
Copyright © 2011-2022 走看看