POJ2983 查分约束系统
题意:
给你n个点,然后给你两种情况,P a b c,表明a在b的北边c那么远,V a b 表明a在b的北边(距离最少是1),问你这些条件是否冲突。
思路:
一开始想用带权并查集,先处理P在处理V,想想感觉不对,还是查分约束吧,查分约束处理这个题时间和建图都简单,首先查分约束是根据最短路(或最长路)的不等式关系建图的,给你一个图,跑完最短路对于边<a ,b> 会有dis[b] <= dis[a] + map[a][b];
则 dis[b] - dis[a] <= map[a][b](或者也可以dis[a] - dis[b] >= map[a][b],只不过这样要跑最长路),对于这个题目,
V a b : add(a ,b ,1).
P a b c : add(a ,b ,c) ,add(b ,a ,-c).
跑一遍最长路,或者
V a b : add(a ,b ,-1).
P a b c : add(a ,b ,-c),add(b ,a ,c).
跑一遍最短路。
提醒一点就是别忘记建立超级原点s,s到每个点的距离都是0,这样是为了防止整个图不是一个联通快。
#include<stdio.h>
#include<string.h>
#include<queue>
#define N_node 2000 + 10
#define N_edge 500000 + 200
#define INF 1000000000
using namespace std;
typedef struct
{
int to ,next ,cost;
}STAR;
STAR E[N_edge];
int list[N_node] ,tot;
int in[N_node];
int s_x[N_node];
void add(int a ,int b ,int c)
{
E[++tot].to = b;
E[tot].cost = c;
E[tot].next = list[a];
list[a] = tot;
}
bool spfa(int s ,int n)
{
int mark[N_node] = {0};
memset(in ,0 ,sizeof(in));
for(int i = 0 ;i <= n ;i ++)
s_x[i] = -INF;
s_x[s] = 0;
mark[s] = 1;
in[s] ++;
queue<int>q;
q.push(s);
while(!q.empty())
{
int xin ,tou;
tou = q.front();
q.pop();
mark[tou] = 0;
for(int k = list[tou] ;k ;k = E[k].next)
{
xin = E[k].to;
if(s_x[xin] < s_x[tou] + E[k].cost)
{
s_x[xin] = s_x[tou] + E[k].cost;
//printf("%d %d***\n" ,tou ,xin);
if(!mark[xin])
{
mark[xin] = 1;
if(++in[xin] > n) return 0;
q.push(xin);
}
}
}
}
return 1;
}
int main ()
{
int i ,n ,m ,a ,b ,c;
char str[10];
while(~scanf("%d %d" ,&n ,&m))
{
memset(list ,0 ,sizeof(list));
tot = 1;
for(i = 1 ;i <= m ;i ++)
{
scanf("%s" ,str);
if(str[0] == 'P')
{
scanf("%d %d %d" ,&a ,&b ,&c);
add(a ,b ,c);
add(b ,a ,-c);
}
else
{
scanf("%d %d" ,&a ,&b);
add(a ,b ,1);
}
}
for(i = 1 ;i <= n ;i ++)
add(0 ,i ,0);
if(spfa(0 ,n)) printf("Reliable\n");
else printf("Unreliable\n");
}
return 0;
}
POJ2983 查分约束系统的更多相关文章
- POJ1275Cashier Employment(查分约束系统)
链接1275Cashier Employment 题目大意就是说有一些人来应聘一个超级市场的工作,每个人的应聘的起始时间在0~23时之间,而超市在时间i需要R[i]个工作人员,而每个人的工作时间都是8 ...
- bzoj 2330 SCOI2011糖果 查分约束系统
就根据题目中给的约束条件建图就行了 需要注意的是,我们要做的是最长路,因为需要约束每个点都是大于0 那么可以建一个超级源指向所有点,超级源的dis是1,边长为0 那么这样做最长路就可以了 好了我们这么 ...
- 洛谷P1993 小 K 的农场(查分约束)
/* 加深一下对查分约束的理解 建图的时候为了保证所有点联通 虚拟一个点 它与所有点相连 权值为0 然后跑SPFA判负环 这题好像要写dfs的SPFA 要不超时 比较懒 改了改重复进队的条件~ */ ...
- 1247 排排站 USACO(查分+hash)
/* 暴力查分 n*n */ #include<cstdio> #include<cstring> #include<iostream> #define maxn ...
- codevs 1242 布局(查分约束+SPFA)
/* 查分约束. 给出的约束既有>= 又有<= 这时统一化成一种 Sb-Sa>=x 建边 a到b 权值为x Sb-Sa<=y => Sa-Sb>=-y 建边 b到a ...
- poj 1201 Interval (查分约束)
/* 数组开大保平安. 查分约束: 输入的时候维护st和end 设每个点取元素di个 维护元素个数前缀和s Sbi-Sai-1>=ci 即:建立一条从ai-1到bi的边 权值为ci 表示ai到b ...
- 智学网电脑端查分小工具 已更新V2.2
特别鸣谢这段代码的源作者,我的大佬同学\(MetalkgLZH\).由于我没有做什么工作,这篇随笔基本不含相关技术细节. 再次强调,这个程序的主要部分由\(MetalkgLZH\)完成.技术细节与源码 ...
- BZOJ 4289: PA2012 Tax Dijkstra + 查分
Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边 ...
- BZOJ2330 糖果题解 查分约束
BZOJ 2330 糖果题解 差分约束系统 + SPFA 题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2330 Description ...
随机推荐
- AndroidStudio 中 gradle.properties 的中文值获取乱码问题
0x01 现象 在gradle.properties中定义了全局变量,然后从 build.gradle 中设置 app_name: resValue "string", " ...
- POJ-2195(最小费用最大流+MCMF算法)
Going Home POJ-2195 这题使用的是最小费用流的模板. 建模的时候我的方法出现错误,导致出现WA,根据网上的建图方法没错. 这里的建图方法是每次到相邻点的最大容量为INF,而花费为1, ...
- java安全初学之动态代理
前言:作为安全人员,代理大家用的都很多,那什么是java中的动态代理呢?事实上,java中的"动态"也就意味着使用了反射,因此动态代理是基于反射机制的一种代理模式. 简介: 代理是 ...
- FreeBSD 12.2 已经发布 从现有版本更新到12
#freebsd-update -r 12.2-RELEASE upgrade 如果提示更新第三方软件后,再执行freebsd-update install , 请输入 #pkg update &am ...
- P1060_开心的金明(JAVA语言)
思路 0/1背包问题 模板 //暴力出奇迹 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些 ...
- 画直线的算法之DDA算法+代码实现(法一)
DDA(数值微分法)基于直线微分方程生成直线. 点xi,yi满足直线方程yi=kxi+b, 若xi增加一个单位,则下一步点的位置(xi + 1,yi+1)满足yi+1=k(xi + 1)+ b. 即y ...
- Azure App Service(一)利用Azure DevOps Pipeline 构建镜像,部署应用程序
一,引言 起因是前两天项目上做测试,需要我把写好的基于.NET 5 的 Web 测试程序作成 Docker 镜像.当我在本地验证完功能后,准备利用 Docker 构建应用程序镜像的时候,发现系统不支持 ...
- Qt信号槽源码剖析(一)
大家好,我是IT文艺男,来自一线大厂的一线程序员 大家在使用Qt开发程序时,都知道怎么使用Qt的信号槽,但是Qt信号槽是怎么工作的? 大部分人仍然不知道:也就是说大家只知道怎么使用,却不知道基于什么原 ...
- Python是啥?为什么这么多职业人和学生就算报班也要学它?!
嗨,大家好 这里是汐仔 首先我们先来考究一下近几年的头条和新闻. 1.早在2018年python就已经被纳入高考之一了 2.Python加入全国计算机等级考试,从2018年九月起新增为大学计算机二级考 ...
- Dynamics CRM调用选择用户弹窗
在开发Dynamics CRM的部分场景时我们会遇到一些需要去锁定用户的操作,所以就需要使用Javascript把用户的弹窗弹出来.具体做法如下 我们需要拼接一个弹出选择记录框的url Url格式:C ...