图论进阶指南-银河(差分约束/DAG/tarjan)

2023-11-13

测评地址

题目大意:

第一行给出两个整数N和M。
之后M行,每行三个整数T,A,B,表示一对恒星(A,B)之间的亮度关系。恒星的编号从1开始。
如果T=1,说明A和B亮度相等。
如果T=2,说明A的亮度小于B的亮度。
如果T=3,说明A的亮度不小于B的亮度。
如果T=4,说明A的亮度大于B的亮度。
如果T=5,说明A的亮度不大于B的亮度。
就是告诉你点之间的关系,给每个点确定边权使总和最小最小最小最小

在差分约束系统中有两种表达式

1
x[j] >= x[i] + K 
在松弛后所有的点都满足以上条件
所以这个表达式建图的话是跑最长路的
每个点的上界是无穷的
下界可以通过最长路求出来
所以所有点权总和最小值 可以 用表达式1建图跑最长路求
2
x[j] <= x[i] + K 
跟1式类似

这个题是存在
就比如 val[1] = val[2] ,val[2]=val[3] ,val[3]=val[1]
那么1 ,2 ,3 三个点就形成了一个环
环中的任意两点间不能存在大于0的边权
如果存在的话,求最长路会死循环(无解的情况)

那么每个联通块对答案的贡献就是(size×w)

接下来我们把每一个联通块看作一个单独的点在DAG上跑一边最长路就ok了

具体操作

1.tarjan 缩点(假设都会建图)
2, 建图的时候建超级原点
(也可以在缩完点之后建新图的时候在建立超级原点)
3.每个点的点权最少为1
(因为有超级原点的存在,这里可以不用初始化)
4.DAG上dp求最长路
5.求解答案(每个联通块的贡献)

CODE:

#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
const int maxn = 4e5 + 70;
int  head[maxn],cntt;
struct node {
    int  u,v,w,next;
} e[maxn];
void add(int u,int v,int w) {
    e[cntt].u=u,e[cntt].v=v,e[cntt].w=w;
    e[cntt].next=head[u],head[u]=cntt++;
}
int n,m,dfn[maxn],indexx,low[maxn],vis[maxn],top,st[maxn];
int cnt,id[maxn],in[maxn],dp[maxn];;
vector<int>ne[maxn];
vector< pair<int,int> > g[maxn];
void tarjan(int u) {
    dfn[u] = low[u] = ++indexx;
    vis[u] =1,st[++top] = u;
    for(int i=head[u]; ~i; i=e[i].next) {
        int v = e[i].v;
        if(!dfn[v]) tarjan(v),low[u] =  min(low[u],low[v]);
        else if(vis[v]) low[u] =  min(low[u],low[v]);
    }
    if(dfn[u]==low[u]) {
        int yy;
        ++cnt;
        do {
            yy=st[top];
            vis[yy] =0 ;
            id[yy]=cnt;
            ne[cnt].push_back(yy);
            top--;
        } while(yy!=u);
    }
}
void DAG() {
    queue<int>q;
    for(int i=1; i<=cnt; i++) if(in[i]==0) q.push(i),dp[i] = 0;
    while(q.size()) {
        int fr = q.front();
        q.pop();
        for(auto t:g[fr]) {
            int v = t.first;
            int w = t.second;
            dp[v] = max(dp[v],dp[fr]+w);
            in[v]--;
            if(in[v]==0) q.push(v);
        }
    }
    ll temp=0;
    for(int i=1 ; i<=cnt ; i++) temp+=ne[i].size()*dp[i]*1ll;
    cout<<temp;
}
int main() {
    //  ios::sync_with_stdio(false);
    cin>>n>>m;
    memset(head,-1,sizeof head);
    for(int i=1 ; i<=n ; i++) add(0,i,1);
    for(int i=1 ; i<=m ; i++) {
        int op,u,v;
        cin>>op>>u>>v;
        if(op==1)  add(u,v,0),add(v,u,0);
        else if(op==2) add(u,v,1);
        else if(op==3) add(v,u,0);
        else if(op==4) add(v,u,1);
        else if(op==5) add(u,v,0);
    }

    for(int i=0 ; i<=n ; i++) if(dfn[i]==0)tarjan(i);

    int flag=0;
    for(int i=0 ; i<=n ; i++) {
        if(flag) break;
        for(int j=head[i]; ~j; j=e[j].next) {
            int v = e[j].v;
            if(id[v]==id[i]) {
                if(e[j].w>0) {
                    flag=1;
                    break;
                }
            } else {
                g[id[i]].push_back({id[v],e[j].w});
                in[id[v]]++;
            }
        }
    }
    if(flag) cout<<"-1";
    else DAG();
    return 0;
}
/*

*/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图论进阶指南-银河(差分约束/DAG/tarjan) 的相关文章

  • 大学生团体天梯赛(第十届)

    题目地址 天梯赛 include
  • hdu 6208 The Dominator of Strings

    Problem acm hdu edu cn showproblem php pid 6208 Meaning 有 n 个字符串 问是否能找到其中一串 使得其它串都是它的子串 Analysis 如果存在这个串 那它一定是 n 个中的最长串
  • PCL点云处理之批量读写点云、随机赋予颜色 并保存

    include
  • A*算法 解决(有环图)第k短路径长度(C++)

    算法竞赛 file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大二在读 brief 一直在算法竞赛学习的路上 copyright 2023 9 COPYRIGHT 原创技术
  • Financial Crisis【点双连通分量】

    题目链接 HDU 3749 你以为学了Tarjan会写几个边双就真的理解什么是双连通分量了吗 我原来真的不懂什么叫做点双BCC 不过这都没有关系 解决了这个问题之后 我终于知道了什么叫做点双连通分量了 这是一个绝对绝对经典的问题 首先讲一下
  • The Stable Marriage Problem 【HDU - 1914】【稳定婚姻匹配问题】

    题目链接 Problem Description The stable marriage problem consists of matching members of two different sets according to the
  • AcWing 378. 骑士放置(最大独立集&&匈牙利算法)

    输入样例 2 3 0 输出样例 4 解析 题意为求最大独立集 即为总点数 最小点覆盖 include
  • [图论]---[网络流]---最大权闭合子图

    最大权闭合子图 闭合图的概念 闭合图建立在有向图之上 对于 G V E 选取一个点的子集 V V 的任意一点的所有能到达的点也在集合 V 内 则称 V 为闭合子图 最大权闭合子图即在G的所有闭合子图中 点权和最大的 最大权闭合子图的求法 构
  • 《算法图解》读书笔记(二)

    第六章 图 广度优先搜索 1 解决最短路径问题 shortest path problem 的算法被称为广度优先搜索 breadth first search 2 图由节点 node 和边 edge 组成 一个节点可能与众多节点直接相连 这
  • 回溯--深度优先搜索(图的M着色问题 poj1129)

    回溯 图的m着色问题 题目描述 给定无向连通图G V E 和m种不同的颜色 用这些颜色为图G的各顶点着色 每个顶点着一种颜色 是否有一种着色法使G中相邻的两个顶点有不同的颜色 这个问题是图的m可着色判定问题 若一个图最少需要m种颜色才能使图
  • hdu 3966 Aragorn's Story

    Problem acm hdu edu cn showproblem php pid 3966 Reference 树链剖分 树链剖分原理 树链剖分详解及模板 HDU3966 树链剖分 Meaning 一棵 n 个点的树 每给结点有个值 三
  • GYM-102920-L. Two Buildings(决策单调性+分治)

    题目链接 题目大意 求一段序列的 h i h j j i 的最大值 step1 转化一下题意 h i h j j i h j h i j i 令a i h i b i h i 然后全部转化为两种坐标 i a i i b i 这样题目就转化成
  • King's Quest【POJ 1904】【Tarjan强连通分量】

    Once upon a time there lived a king and he had N sons And there were N beautiful girls in the kingdom and the king knew
  • 数据结构练习题——图(含应用题)

    1 选择题 1 在一个图中 所有顶点的度数之和等于图的边数的 倍 A 1 2 B 1 C 2 D 4 答案 C 2 在一个有向图中 所有顶点的入度之和等于所有顶点的出度之和的 倍 A 1 2 B 1 C 2 D 4 答案 B 解释 有向图所
  • 蓝桥杯 题库 简单 每日十题 day2

    01 卡片 题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 小蓝有很多数字卡片 每张卡片上都是数字 0 到 9 小蓝准备用这些卡片来拼一些数 他想从 1 开始拼出正整数 每拼一个 就保存起来 卡片就不能用来
  • 1600*B. pSort(并查集)

    解析 并查集 将能够交换的位置相连 查看对应的位置能够交换 include
  • 图 - Java实现无向带权图的邻接矩阵表示法

    图 Java实现无向带权图的邻接矩阵表示法 1 图 1 1 图的介绍 图 Graph 是一种复杂的非线性表结构 图中的元素我们就叫做顶点 vertex 图中的一个顶点可以与任意其他顶点建立连接关系 我们把这种建立的关系叫做边 edge 跟顶
  • Binary Tree on Plane【费用流】

    题目链接 CF 277 E 题意翻译 给你平面上 n 个点 2 n 400 要求用这些点组成一个二叉树 每个节点的儿子节点不超过两个 定义每条边的权值为两个点之间的欧几里得距离 求一个权值和最小的二叉树 并输出这个权值 其中 点 i 可以成
  • 有向图的拓扑排序

    给定一个 nn 个点 mm 条边的有向图 点的编号是 11 到 nn 图中可能存在重边和自环 请输出任意一个该有向图的拓扑序列 如果拓扑序列不存在 则输出 1 1 若一个由图中所有点构成的序列 AA 满足 对于图中的每条边 x y x y
  • D (1173) : A DS二叉树_合并二叉树

    文章目录 一 题目描述 二 输入与输出 1 输入 2 输出 三 参考代码 一 题目描述 给定两个二叉树 输出这两个二叉树合并后形成的二叉树 依次输出前序遍历 中序遍历 后序遍历 二 输入与输出 1 输入 第一行输入t 表示有t个测试样例 第

随机推荐

  • 【网络安全】——区块链安全和共识机制

    区块链安全和共识机制 摘要 区块链技术作为一种分布式去中心化的技术 在无需第三方的情况下 使得未建立信任的交易双方可以达成交易 因此 区块链技术近年来也在金融 医疗 能源等多个行业得到了快速发展 然而 区块链为无信任的网络提供保障的同时 也
  • 《算法导论》总结与分析

    算法导论总结与分析 分治 strassen算法 介绍 步骤 正确性证明 复杂度分析 排序 堆排序 介绍 步骤 构建 排序 优先队列 复杂度分析 快速排序 介绍 步骤 复杂度分析 最坏情况 最好情况 线性时间排序 介绍 步骤 复杂度分析 数据
  • 课堂小作业之3位水仙花数计算

    3位水仙花数计算 描述 3位水仙花数 是指一个三位整数 其各位数字的3次方和等于该数本身 例如 ABC是一个 3位水仙花数 则 A的3次方 B的3次方 C的3次方 ABC
  • 组合优化技术

    组合优化是指在离散领域内 寻找最优解的问题 在通信工程中 组合优化的应用非常广泛 例如在无线通信系统中 可以使用组合优化算法来优化信道资源分配 功率控制 调制方式等问题 组合优化问题通常包含以下要素 决策变量 表示问题的解 通常是一个离散的
  • spring cloud版本由1.5.x升级到2.x所遇到的坑

    众所知周 spring cloud 1 5版本与2 x版本差异很大 官方没有做向下兼容 导致大家对于升级spring cloud版本都非常慎重 此处 首先推荐阅读官方给出的迁移手册 Spring Boot 2 0 Migration Gui
  • ChatGPT学习相关资料整理

    ChatGPT学习相关资料整理 关于ChatGPT的相关咨询和新闻 ChatGPT能力起源 https mp weixin qq com s 4l0ADjdsCxSVvBeVKxSqWA ChatGPT的发展历程 https zhuanla
  • 生产数据采集MDC的总体思路

    一 数控机床通过网口连到局域网 MDC服务器与数控机床通讯 定时取得所需数据 将数据写入数据库 二 MES对数据库中的数据进行分析 展示到大屏上 我这里是机械制造型企业 以上步骤已经完成 有相同需求的朋友 欢迎一起交流细节
  • SQL INSERT INTO 语句

    INSERT INTO 语句用于向表中插入新记录 语法 指定列插入数据 INSERT INTO table name colnum1 colnum2 column3 VLAUES value1 value2 value3 不指定列插入数据
  • java - JVM CPU100%,问题排查

    前段时间我们新上了一个新的应用 因为流量一直不大 集群QPS大概只有5左右 写接口的rt在30ms左右 因为最近接入了新的业务 业务方给出的数据是日常QPS可以达到2000 大促峰值QPS可能会达到1万 所以 为了评估水位 我们进行了一次压
  • FormData实现文件上传

    应用场景 FormData Ajax技术实现文件上传 1 FormData使用 FormData是一个构造函数 首先new FormData 得到一个FormData对象 可以直接使用 直接console会是一个空白的对象 有append方
  • 未解决-联想拯救者r7000 CTRL+C复制键无法使用

    情况描述 突然不能使用 不知道是什么操作导致不能使用 也不知道什么操作解决了问题 发生次数 四次以上 判断过程 鼠标右键复制可以使用 外接键盘复制可以使用 无QQ 微信等热键冲突 网页 记事本都无法使用 ctrlA ctrlX ctrlV可
  • 手把手教你画活动图,再无难搞的流程分析

    上次介绍了 用例图这样画 3步让你做需求分析有理有据 这次聊聊活动图 也许你对活动图并不了解 不过 说起流程图 想必你不会陌生 你可以暂且把活动图 看成 UML 中的流程图 都知道 做产品要分析流程 可怎么把流程理清楚呢 当然不能凭空想象
  • ANN神经网络入门——分类问题(MATLAB)

    写在前面 本篇博客的鸢尾花分类程序来源于博客http www cnblogs com heaad archive 2011 03 07 1976443 html 在上述博客中 作者主要介绍了以下三部分内容 1 神经网络基本原理 2 AFor
  • Angular和RxJS:添加REST API后端

    本文是SitePoint Angular 2 教程的第3部分 该教程有关如何使用Angular CLI创建CRUD应用程序 在本文中 我们将更新我们的应用程序以与REST API后端进行通信 更喜欢使用分步视频课程学习Angular 退房
  • 上传本地新项目到SVN服务器

    1 在一个已有检出的项目文件夹 如下的文件夹 1 就是我从svn检出的项目 中 在空白处 右键 gt TortoiseSVN gt Repo browser 这样就到了svn服务器的目录了 打开远程地址目录 2 创建一个文件夹给即将上传的项
  • 一文拿下弱网测试:3大弱网模拟工具的配置、场景弱网原因分析、面试题目……

    软件质量不是口头说说 要实际做起来 正文开始 如果app没有对各种网络异常进行兼容处理 那么用户可能在日常生活中遇到APP闪退 ANR 数据丢失等问题 因此 app网络测试 特别是弱网测试尤为重要 本文梳理了app网络测试要点和弱网测试常用
  • 2023年1月16日--2023年1月22日(osg+glsl+socket+ue, 本周20小时,合计1879小时,剩余8121小时)

    目前 ue视频教程进行到了zccs 预1 mysql 7 1 tf1 4 11 o s s 12 2 蓝图反射 1 9 moba 1 5 webapp 2 4 mmoarpg 00A 04 socket 2 57 Opengl 5 9 GL
  • 十三、传智书城项目设计

    项目源代码及sql脚本 一 项目概述 近年来 随着Internet的迅速崛起 互联网已成为收集信息的最佳渠道并逐步进入传统的流通领域 于是电子商务开始流行起来 越来越多的商家在网上建起在线商店 向消费者展示出一种新颖的购物理念 网上购物系统
  • yolo中iou_thres的含义及作用

    yolo中iou thres的含义及作用 iou thres 参数用于控制非极大值抑制 NMS 中的边界框合并阈值 较大的 iou thres 值会导致更多的边界框被合并 从而减少最终输出的边界框数量 是否将 iou thres 设置得更大
  • 图论进阶指南-银河(差分约束/DAG/tarjan)

    测评地址 题目大意 第一行给出两个整数N和M 之后M行 每行三个整数T A B 表示一对恒星 A B 之间的亮度关系 恒星的编号从1开始 如果T 1 说明A和B亮度相等 如果T 2 说明A的亮度小于B的亮度 如果T 3 说明A的亮度不小于B