(精)题解 guP4878 [USACO05DEC] 布局
差分约束模版题
不过后三个点简直是满满的恶意qwq
这里不说做题思路(毕竟纯模板),只说几个坑点:
1. 相邻的两头牛间必须建边(这点好像luogu没有体现),例如一组数据:
4 1 1
1 4 10
2 3 20
output:-1
若相邻牛未建边,跑出来的结果是10;而事实如图:

存在负权环。
因此我在代码里写了一条:
for(int i=1;i<n;i++)
{
    add(i+1,i,0);
}
------我是分割线-------
2. 应跑两遍SPFA,一遍从超级源点0判断有无解,一遍从1计算结果。
如果不跑0那一遍,则可能判不出题目原图是否联通或有无负权环(毕竟从点1不一定能到达所有点)。
所以要建边qwq
for(int i=1;i<=n;i++)
{
    add(0,i,0);
}
似乎可以了qwq
AC代码:
//Author:pawn
#include<bits/stdc++.h>
using namespace std;
int n,ml,md,a,b,c,fst[10100],nex[50010],v[50010],w[50010],cnt,vis[10100],dis[10100],tim[10100];
queue<int> q;
void add(int a,int b,int c)
{
    nex[++cnt]=fst[a];
    fst[a]=cnt;
    v[cnt]=b;
    w[cnt]=c;
    return ;
}
int spfa(int k)
{
    memset(dis,0x7f/3,sizeof(dis));
    memset(vis,0,sizeof(vis));
    memset(tim,0,sizeof(tim));
    q.push(k);
    dis[k]=0;
    vis[k]=1;
    while(!q.empty())
    {
        int u=q.front();
        //cout<<u<<" ";
        q.pop();
        tim[u]++;
        vis[u]=0;
        if(tim[u]>n)
        return -1;
        for(int i=fst[u];i!=-1;i=nex[i])
        {
            if(dis[v[i]]>dis[u]+w[i])
            {
                dis[v[i]]=dis[u]+w[i];
                if(!vis[v[i]])
                {
                    q.push(v[i]);
                    vis[v[i]]=1;
                }
            }
        }
    }
    /*cout<<endl;
    for(int i=1;i<=n;i++)
    {
        cout<<dis[i]<<" ";
    }*/
    if(dis[n]>1e8)
    return -2;
    return dis[n];
}
int main()
{
    memset(fst,-1,sizeof(fst));
    cin>>n>>ml>>md;
    for(int i=1;i<=ml;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        add(a,b,c);
    }
    for(int i=1;i<=md;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        add(b,a,-c);
    }
    for(int i=1;i<n;i++)
    {
        add(i+1,i,0);
    }
    for(int i=1;i<=n;i++)
    {
        add(0,i,0);
    }
    int sp=spfa(0);
    if(sp<=-1)
    {
    	cout<<sp;
    	return 0;
    }
    else
    {
    	cout<<spfa(1);
    }
    //cout<<" "<<sp;
    return 0;
}
/*
5 1 1
1 5 10
2 3 20
*/
//output:-1
求过qwq
(精)题解 guP4878 [USACO05DEC] 布局的更多相关文章
- 洛谷 [USACO05DEC] 布局 题解
		今天学了差分约束系统, 这是一道板子题. 核心:a[v]>a[u]+d 相当于从u到v连一条长度为d的有向边.由于要判断有环,所以要从0点先跑一遍spfa因为1点不一定能到所有的点. #incl ... 
- 差分约束算法————洛谷P4878 [USACO05DEC] 布局
		题目: 不难看出题意主要是给出ml+md个格式为xi-xj<=ak的不等式,xi-xj为i,j俩头牛的距离,要我们求x1-xn的最大值. 经过上下加减我们可以将这几个不等式化成x1-xn< ... 
- Luogu P4878 [USACO05DEC]布局
		题目 差分约束模板. 注意判负环需要建一个超级源点到每个点连一条\(0\)的边.因为\(1\)不一定能到达所有的点. #include<bits/stdc++.h> #define pi ... 
- P4878 [USACO05DEC] 布局
		题面lalala 这居然是个紫题???原谅我觉得这题是模板... 这个这个,这题的算法呢其实是一个叫差分约束的东西,也是今天下午我们机房的重点,如果不知道这个差分约束是个啥的人呢,自行百度一下谢谢.. ... 
- 洛谷1303 A*B Problem 解题报告
		洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ... 
- 2021.11.02 eleveni的水省选题的记录
		2021.11.02 eleveni的水省选题的记录 因为eleveni比较菜,所以eleveni决定从绿题开始水 --实际上菜菜的eleveni连绿题都不一定能水过/忍不住哭了 [P2217 HAO ... 
- P4878 [USACO05DEC]layout布局
		P4878 [USACO05DEC]layout布局 差分约束 最短路径最长路,最长路径最短路 本题求的是最长路径,所以跑最短路 根据题意连边,然后spfa即可 注意要判断图的连通性,所以新建一个虚拟 ... 
- 题解 P1601 【A+B Problem(高精)】
		P1601 A+B Problem(高精) 题目描述 高精度加法,x相当于a+b problem,b不用考虑负数. 输入输出格式 输入格式: 分两行输入a,b<=10^500 输出格式: 输出只 ... 
- jQuery EasyUI布局容器layout实例精讲
		这个布局容器,有五个区域:北.南.东.西和中心. 他中心地区面板是必需的,但是边缘地区面板是可选的.每一个边缘地区面板可以缩放的拖动其边境, 他们也可以通过点击其收缩触发.布局可以嵌套,从而用户可以建 ... 
随机推荐
- Apple macOS 下载汇总
			macOS Big Sur 11,macOS Catalina 10.15,macOS Mojave 10.14,macOS High Sierra 10.13,macOS Sierra 10.12 ... 
- Go语言中的单例模式
			Go语言中的单例模式 在过去的几年中,Go语言的发展是惊人的,并且吸引了很多由其他语言(Python.PHP.Ruby)转向Go语言的跨语言学习者. Go语言太容易实现并发了,以至于它在很多地方被不正 ... 
- Docker学习(5) 在docker中部署静态网站
			在容器中部署静态网站 设置容器的端口映射 在容器中部署静态网站 - Nginx部署流程 1 创建映射80端口的交互式容器 2 安装Nginx 3 安装文本编辑器vim 4 创建静态页面 5 修改N ... 
- GO语言的JSON02---反序列化
			package main import ( "encoding/json" "fmt" ) type Human struct { Name string Ag ... 
- 深入探索Glide图片加载框架:做了哪些优化?如何管理生命周期?怎么做大图加载?
			前言 Glide可以说是最常用的图片加载框架了,Glide链式调用使用方便,性能上也可以满足大多数场景的使用,Glide源码与原理也是面试中的常客. 但是Glide的源码内容比较多,想要学习它的源码往 ... 
- springmvc——CharacterEncodingFilter过滤器要放在所有过滤器前面
			CharacterEncodingFilter的拦截顺序必须是第一个,否则还是会出现乱码问题.这是因为 request对象的parameter并不是一开始就解析的,它是等你第一次调用getParame ... 
- Fedora 34成哑巴了?
			原由 前几天刚更新了Fedora34,完全沉浸在Gnome40的喜悦中.但是今天用耳机听Apple Music的时候完全傻了,音量控制旋钮调了半天也没有声音,难道声卡坏了?于是,我试探性的用Parro ... 
- 【NX二次开发】Block UI 面收集器
			属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ... 
- 【SQLite】教程01-SQLite简介与安装
			为什么要用 SQLite? 不需要一个单独的服务器进程或操作的系统(无服务器的). SQLite 不需要配置,这意味着不需要安装或管理. 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘 ... 
- DOS命令行(6)——Windows网络状态及用户管理
			ipconfig --查看计算机中适配器的TCP/IP配置信息 命令格式: ipconfig [/allcompartments] [/? | /all | /renew [adapter] | /r ... 
