首页 > 其他分享 >差分约束(模板)

差分约束(模板)

时间:2022-08-25 15:57:48浏览次数:93  
标签:int MAX 短路 差分 约束 负环 edge 模板 dis

P5960 【模板】差分约束算法 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  • 转换为最短路问题
  • i-j<=c转换为i<=j+c表示有一条从j连到i的权值为c的边,设置一个0号源点,与各点都有连线且连线为0.
  • 如果以上建成的图存在单源最短路,那么最短路0号源点到各点的距离就是答案
  • 如果存在负环那么就不存在最短路,判断负环(松弛次数==n+1就是有负环存在,因为有0号源点所以是n+1)
#include <bits/stdc++.h>
using namespace std;
#define N 1e5
#define INF 2e9
#define MAX 10000000

int head[MAX], idx;
struct Node
{
    int to, dis, nex;
} edge[MAX];
void add(int u, int v, int dis)
{
    edge[++idx] = Node{v, dis, head[u]};
    head[u] = idx;
}
queue<int> q;
int n, m;
int cnt[MAX], dis[MAX];
bool in[MAX];
bool spfa(int start)
{
    q.push(start);
    in[start] = true;
    for (int i = 1; i <= n; i++)
    {
        dis[i] = INF;
    }
    dis[start] = 0;
    while (!q.empty())
    {
        int now = q.front();
        q.pop();
        in[now] = false;
        for (int i = head[now]; i; i = edge[i].nex)
        {
            int to = edge[i].to;
            if (dis[to] > edge[i].dis + dis[now])
            {
                dis[to] = edge[i].dis + dis[now];
                if (!in[to])
                {
                    in[to] = true;
                    cnt[to]++;
                    if (cnt[to] == n + 1)
                    {
                        return false;
                    }
                    q.push(to);
                }
            }
        }
    }
    return true;
}
void input()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        add(0, i, 0);
    for (int i = 1, a, b, c; i <= m; i++)
    {
        scanf("%d %d %d", &a, &b, &c);
        add(b, a, c);
    }
}
int main()
{
    input();
    if (!spfa(0))
        printf("NO");
    else
        for (int i = 1; i <= n; i++)
            printf("%d ", dis[i]);
}

 

标签:int,MAX,短路,差分,约束,负环,edge,模板,dis
From: https://www.cnblogs.com/Wang-Xianyi/p/16624509.html

相关文章

  • 【神经网络】应对过拟合:权重衰减与均等范数约束条件
    应对过拟合:权重衰减与均等范数约束条件Outline在神经网络中,常常出现过拟合问题。本文介绍了权重衰减以及其背后的原理(优化GBR上界),并在最后对其他应对过拟合的方式进行了......
  • Unity-单例模板
    普通单例模板publicabstractclassSingleton<T>whereT:new(){privatestaticTinstance;publicstaticTInstance{get{if(i......
  • 基础数论模板
    快速幂longlongqpow(longlonga,longlongb){ longlongans=1; for(;b;b>>=1) { if(b&1) ans=ans*a%p; a=a*a%p; } returnans;}线性筛......
  • 【AGC】如何快速部署Serverless Url缩短模板
     使用场景Serverless短URL生成模板实现您将在云数据库服务中URL缩短的诉求。使用此模板后,仅需在云数据库服务侧配置长URL值。Serverless短URL生成模板会在后台与BitlyA......
  • 0基础替换数据:智慧城市可视化大屏模板合集
    听说你还在找智慧城市大屏的模板?这不就来了嘛~! 本文精选了山海鲸可视化的6份智慧城市大屏模板,颜值天花板+高级感拉满!最重要的是只需要将自己的数据替换到模板中去,再将组......
  • 798 差分
    includeusingnamespacestd;constintN=2000;inta[N][N],b[N][N];intmain(){intn,m,q;cin>>n>>m>>q;for(inti=1;i<=n;i++){for(intj......
  • Kotlin中的字符串模板
    Kotlin字符串模板支持在字符串的引号内使用变量,以及添加任何表达式,会把表达式的结果作为字符串的一部分,实现java字符串拼接的效果例如:运行结果: ......
  • ac 797 差分
    //常规时间复杂度为n*m//#include<bits/stdc++.h>//usingnamespacestd;//intmain(){//intn,m;//cin>>n>>m;//vectornums;//for......
  • 测试用例模板
       用例编号功能模块用例标题前置条件操作步骤预期结果优先级测试结果备注 ......
  • ABB 机械手模板二
    这种模板适合把机器人当作一套运动控制单元,顺控逻辑放在PLC里,机器人只做动作逻辑。机器人和PLC通讯可以用profinet,或直接用电缆连接。下面是PLC和机械手通讯用到的两个任......