3169 Layout

简单的差分约束

看错成一个图,dis[B]-dis[A]<=w,或者dis[B]-dis[A]>=W,然后求出图的最短距离,用bellman-ford算法就可以了

判断图是否有负环,输出-1,否则判断n和1是否可达,如果不行输出-2.否则输出最短距离。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
const int N =1010;
int n,ml,md;
struct node{
int u,v,w;
}edge[N*10];
int dis[N];
const int INF = 999999;
bool bellford(){
for(int i = 1;i<=n;i++)dis[i] = INF;
dis[1] = 0;
for(int i = 0;i<n;i++)
for(int i = 0;i<md+ml;i++){
if(dis[edge[i].u]!=INF && dis[edge[i].v]>dis[edge[i].u]+edge[i].w)dis[edge[i].v] = dis[edge[i].u]+edge[i].w;
}
for(int i = 0;i<md+ml;i++)if(dis[edge[i].u]!=INF && dis[edge[i].v]>dis[edge[i].u]+edge[i].w)return false;
return true;
}
int main()
{
scanf("%d%d%d",&n,&ml,&md);
for(int i = 0;i<ml;i++){
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);
}
int u,v,w;
for(int i = 0;i<md;i++){
scanf("%d%d%d",&u,&v,&w);
edge[i+ml].u = v;
edge[i+ml].v = u;
edge[i+ml].w = -w;
}
if(bellford()){
if(dis[n]!=INF)printf("%d\n",dis[n]);
else printf("-2");
}else {
printf("-1\n");
}
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LayoutControl是一种用于实现复合布局的控件。它可以在Windows窗体应用程序中使用,用于排列和管理其他控件的位置和大小。LayoutControl可以将子控件分组为布局组(LayoutGroup),并根据布局组的规则自动调整子控件的位置和大小。 LayoutControl的主要好处是它可以自动维护子控件的一致布局。无论是调整窗口大小、添加或删除控件,还是更改控件的字体设置,LayoutControl都会自动调整子控件的位置和大小,以确保它们不会重叠。但需要注意的是,如果手动调整了控件的边距属性,可能会导致控件重叠。 以下是一个使用LayoutControl的示例: ```csharp using DevExpress.XtraLayout; // 创建一个LayoutControl控件 LayoutControl layoutControl = new LayoutControl(); // 创建布局组 LayoutControlGroup layoutGroup = new LayoutControlGroup(); layoutGroup.Text = "布局组"; // 创建子控件 TextEdit textEdit1 = new TextEdit(); TextEdit textEdit2 = new TextEdit(); // 将子控件添加到布局组中 layoutGroup.AddItem("文本框1", textEdit1); layoutGroup.AddItem("文本框2", textEdit2); // 将布局组添加到LayoutControl中 layoutControl.Root.AddItem(layoutGroup); // 将LayoutControl添加到窗体中 this.Controls.Add(layoutControl); ``` 这个示例创建了一个LayoutControl控件,并在其中添加了一个布局组和两个文本框子控件。LayoutControl会自动调整文本框的位置和大小,以确保它们不会重叠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值