博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj1201 查分约束系统
阅读量:5107 次
发布时间:2019-06-13

本文共 1238 字,大约阅读时间需要 4 分钟。

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;
}

转载于:https://www.cnblogs.com/buptLizer/archive/2011/09/10/2173409.html

你可能感兴趣的文章
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
idea 系列破解
查看>>
Repeater + Resources 列表 [原创][分享]
查看>>
c# Resolve SQlite Concurrency Exception Problem (Using Read-Write Lock)
查看>>
dependency injection
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
C#综合揭秘——细说多线程(下)
查看>>
【题解】青蛙的约会
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>
Swift3.0服务端开发(三) Mustache页面模板与日志记录
查看>>
【转】 FPGA设计的四种常用思想与技巧
查看>>
EntityFrameWork 实现实体类和DBContext分离在不同类库
查看>>
新手算法学习之路----二叉树(在一个二叉查找树中插入一个节点)
查看>>
autopep8
查看>>