• P5960【模板】差分约束


    【模板】差分约束

    题目描述

    给出一组包含 m m m不等式,有 n n n 个未知数的形如:

    { x c 1 − x c 1 ′ ≤ y 1 x c 2 − x c 2 ′ ≤ y 2 ⋯ x c m − x c m ′ ≤ y m {xc1xc1y1xc2xc2y2xcmxcmym xc1xc1y1xc2xc2y2xcmxcmym

    的不等式组,求任意一组满足这个不等式组的解。

    输入格式

    第一行为两个正整数 n , m n,m n,m,代表未知数的数量和不等式的数量。

    接下来 m m m 行,每行包含三个整数 c , c ′ , y c,c',y c,c,y,代表一个不等式 x c − x c ′ ≤ y x_c-x_{c'}\leq y xcxcy

    输出格式

    一行, n n n 个数,表示 x 1 , x 2 ⋯ x n x_1 , x_2 \cdots x_n x1,x2xn 的一组可行解,如果有多组解,请输出任意一组,无解请输出 NO

    样例 #1

    样例输入 #1

    3 3
    1 2 3
    2 3 -2
    1 3 1
    
    • 1
    • 2
    • 3
    • 4

    样例输出 #1

    5 3 5
    
    • 1

    提示

    样例解释

    { x 1 − x 2 ≤ 3 x 2 − x 3 ≤ − 2 x 1 − x 3 ≤ 1 {x1x23x2x32x1x31 x1x23x2x32x1x31

    一种可行的方法是 x 1 = 5 , x 2 = 3 , x 3 = 5 x_1 = 5, x_2 = 3, x_3 = 5 x1=5,x2=3,x3=5

    { 5 − 3 = 2 ≤ 3 3 − 5 = − 2 ≤ − 2 5 − 5 = 0 ≤ 1 {53=2335=2255=01 53=2335=2255=01

    数据范围

    对于 100 % 100\% 100% 的数据, 1 ≤ n , m ≤ 5 × 1 0 3 1\leq n,m \leq 5\times 10^3 1n,m5×103 − 1 0 4 ≤ y ≤ 1 0 4 -10^4\leq y\leq 10^4 104y104 1 ≤ c , c ′ ≤ n 1\leq c,c'\leq n 1c,cn c ≠ c ′ c \neq c' c=c

    评分策略

    你的答案符合该不等式组即可得分,请确保你的答案中的数据在 int 范围内。

    如果并没有答案,而你的程序给出了答案,SPJ 会给出 There is no answer, but you gave it,结果为 WA;
    如果并没有答案,而你的程序输出了 NO,SPJ 会给出 No answer,结果为 AC;
    如果存在答案,而你的答案错误,SPJ 会给出 Wrong answer,结果为 WA;
    如果存在答案,且你的答案正确,SPJ 会给出 The answer is correct,结果为 AC。

    解法

    SPFA

    #include  
    using namespace std;
    struct road {
    	int v,w;
    };
    vector<road> v[10086];
    int n,m,ta,tb,tc,dis[10086],fang[10086];
    bool vis[10086];
    queue <int> q;
    int main() {
    	scanf("%d%d",&n,&m);
    	for (int i=1;i<=m;i++) {
    		scanf("%d%d%d",&ta,&tb,&tc);
    		v[tb].push_back({ta,tc});
    	}
    	for (int i=1;i<=n;i++) {
    		v[0].push_back({i,0});
    		dis[i]=0x7fffffff;
    	}
    	q.push(0);
    	dis[0]=0;
    	while (!q.empty()) {
    		int u=q.front();
    		q.pop();
    		vis[u]=0;
    		int l=v[u].size();
    		for (int i=0;i<l;i++) {
    			if (dis[u]+v[u][i].w<dis[v[u][i].v]) {
    				dis[v[u][i].v]=dis[u]+v[u][i].w;
    				if (!vis[v[u][i].v]) {
    					fang[v[u][i].v]++;
    					if (fang[v[u][i].v]>n+1) {
    						cout <<"NO";
    						return 0;
    					}
    					q.push(v[u][i].v);
    					vis[v[u][i].v]=1;
    				}
    			}
    		}
    	}
    	for (int i=1;i<=n;i++) {
    		cout <<dis[i] <<" ";
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
  • 相关阅读:
    JeecgBoot搭建及启动笔记
    30分钟熟练使用最常用的ES6,还不学是等着被卷死?
    使用p2p实现Linux内网快速分发文件
    一起Talk Android吧(第五百五十七回:如何获取文件读写权限)
    Android 11 修改Makefile去掉编译时禁止拷贝APK限制
    Maven Plugins And SpringBoot Package (一)
    《对比Excel,轻松学习Python数据分析》读书笔记------数据分组与数据透视表
    Spring Cloud Alibaba 工程搭建
    子层连接结构
    centos7云服务器安装nginx记录
  • 原文地址:https://blog.csdn.net/DUXS11/article/details/134424703