P4878 [USACO05DEC]Layout G

题意:

题解:

这个题其实是差分约束的裸题,但是有几个坑要注意
1.题目说了,奶牛按照编号1…N排列,对于ML个输入,A< B
,所以关系是B - A < 10,而不是A - B <10,我一开始看反了。。导致一直wa
2.题目没说图连通,所以要么每个点都跑一遍spfa,要么建一个超级源点0,0到其他n个点的距离是0,从0跑,这样所有点都在一个连通块内
3,题目要求三种情况,第一个是没有方案,第二个是有合法方案,但是距离无穷远,第三个是有合法方案,且不是无穷远。所以一遍spfa是不足够的,因为第一种情况要判断负环,负环的优先级是最高的,所以先跑一个spfa(0),然后再判断情况2,3,再跑spfa(1)

代码:

代码最后一个点wa了不知道为什么。。。
对拍也没找到错误,哭了,,
我的代码:

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=4e4+9;
struct node{int v,w;
};
int n,ml,md;
vector<node>edge[maxn];
int dis[maxn],vis[maxn];
int cnt[maxn];
void spfa(int now)
{for(int i=1;i<=n;i++)dis[i]=1e9+7;memset(vis,0,sizeof(vis));memset(cnt,0,sizeof(cnt));vis[now]=1;queue<int>q;dis[now]=0;q.push(now);while(!q.empty()){int u=q.front();q.pop();vis[u]=0;for(int i=0;i<edge[u].size();i++){int v=edge[u][i].v;int w=edge[u][i].w;if(dis[v]>dis[u]+w){dis[v]=dis[u]+w;cnt[v]=cnt[u]+1;if(cnt[v]>=n+1){puts("-1");exit(0);//return 1;//存在负环 }if(vis[v]==0){q.push(v);vis[v]=1;} }}}//return 0;
}
int main()
{cin>>n>>ml>>md;int a,b,d;for(int i=1;i<=n;i++){edge[0].push_back(node{i,0});}for(int i=1;i<=ml;i++){cin>>a>>b>>d;edge[a].push_back(node{b,d});}for(int i=1;i<=md;i++){cin>>a>>b>>d;edge[b].push_back(node{a,-d});}spfa(0);spfa(1);if(dis[n]==1e9+7)cout<<-2<<endl;else cout<<dis[n]<<endl;return 0;
}
/*
4 2 1
1 3 10
2 4 20
2 3 3
*/

正确的代码:

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define main mian
using namespace std;
const int N=1005;
const int M=40005;
int n,ml,md,a,b,d;
struct EDGE
{int nxt,to,wei,;
}edge[M];
int head[N],tot;
inline void add(int x,int y,int v)
{edge[++tot].nxt=head[x];edge[tot].to=y;edge[tot].wei=v;head[x]=tot;
}
queue<int> q;
int vis[N],dis[N],circle[N];
void spfa(int s)
{memset(dis,0x3f,sizeof(dis));memset(vis,0,sizeof(vis));memset(circle,0,sizeof(circle));q.push(s);vis[s]=1,dis[s]=0;while(!q.empty()){int now=q.front(); q.pop(); vis[now]=0;for(int i=head[now];i;i=edge[i].nxt){int tt=edge[i].to;if(dis[now]+edge[i].wei<dis[tt]){dis[tt]=dis[now]+edge[i].wei;circle[tt]=circle[now]+1;if(circle[tt]>=n){puts("-1");exit(0);}if(!vis[tt]){vis[tt]=1;q.push(tt);}}}}}
int main()
{int n;scanf("%d%d%d",&n,&ml,&md);for(int i=1;i<=n;i++) add(0,i,0);for(int i=1;i<=ml;i++){scanf("%d%d%d",a,b,d);add(a,b,d);}for(int i=1;i<=md;i++){scanf("%d%d%d",a,b,d);add(b,a,-d);}spfa(0);spfa(1);if(dis[n]==INF) puts("-2");else printf("%d",dis[n]);return 0;
}

P4878 [USACO05DEC]Layout G相关推荐

  1. Jozky 刷题目录

    文章目录 本目录参考OI-Wiki 还未解决专区 算法基础 枚举 模拟 递归&分治 贪心 排序 前缀和&差分 二分 倍增 构造 搜索 DFS && BFS 双向搜索 启 ...

  2. 2018年12月3031日

    小结:昨天由于做的题目比较少,所以就和今天写在一块了,昨天学习了差分约束和树上差分,当然树上差分是用线段树来维护的,今天重点整理了博客\(233\),然后做了几个题. 一. 完成的题目: 洛谷P327 ...

  3. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  4. 一文读懂Python复杂网络分析库networkx | CSDN博文精选

    作者 | yyl424525 来源 | CSDN博客 文章目录 1. 简介 安装 支持四种图 绘制网络图基本流程 2. Graph-无向图 节点 边 属性 有向图和无向图互转 3. DiGraph-有 ...

  5. PHP版本的Graphviz样例之集群流程图

    Graphviz是一个强大的开源的图形软件包,不仅支持桌面应用,也支持Web应用,其关键技术在于它的自动布局和布线功能. 安装libgv-php5后,Graphviz支持PHP编程,可以实现浏览器上显 ...

  6. igraph入门教程

    python-igraph的基本操作 参考:python-igraph官网教程 ps: 在jupyter上运行后直接导出的md,可能有点乱码 部分翻译靠的是机翻,勿细究 更多的教程在igraph的官网 ...

  7. js股票K线图,比较专业的K线图插件

    由於項目裏面要做個有關交易的平臺,其中要畫k線圖(蠟燭圖),在網上找了很多插件感覺都沒有專業的股票交易平臺弄的k線圖專業,因此為了趕進度,將就用了百度的echarts來做k線圖,結果發現如果點比較少的 ...

  8. 离线安装VS2019教程

    由于企业电脑---工控机 win7系统,要求不能联网,但又需要安装VS2019(正常联网安装十分便捷),选择离线安装. 前期工具:提前准备一个U盘,越大越好.准备一台能联网的笔记本.具体教程如下: 1 ...

  9. 【CSDN软件工程师能力认证学习精选】Python可视化库

    CSDN软件工程师能力认证(以下简称C系列认证)是由中国软件开发者网CSDN制定并推出的一个能力认证标准.C系列认证历经近一年的实际线下调研.考察.迭代.测试,并梳理出软件工程师开发过程中所需的各项技 ...

最新文章

  1. mysql 资深dba_MySQL数据库专家分享资深DBA经验
  2. 分享基于EF6、Unitwork、Autofac的Repository模式设计
  3. Matlab/Simulink电力系统——无穷大功率电源供电系统三相短路仿真
  4. 微信编辑照片到底该不该增加滤镜功能?
  5. linux (ubuntu)安装pycharm
  6. php usort strcmp,字符串函数演示和usort()进行二维数组排序(0827)
  7. Asp SqlDataSource将数据库数据绑定在 GridView
  8. JavaScript强化教程—— RegExp 对象
  9. java utf8 byte_byte以及UTF-8的转码规则
  10. Python Debug调试技巧
  11. [CentOs7]搭建ftp服务器(2)——添加用户
  12. sogou rank查询接口
  13. Java随机产生中文昵称
  14. 【PyG】文档总结以及项目经验(持续更新
  15. linux修改BCD文件,关于BCDEdit 命令的使用
  16. 简单方法适配IphoneXS Iphone XR IphoneXS MAX
  17. 穆迪将收购GCR Ratings多数股权以拓展非洲业务
  18. 第 8 章 Python 计算生态
  19. 003day (css文本、列表、背景相关属性,精灵图的制作)
  20. 智能商业化模式:信息流广告的动态展现策略

热门文章

  1. 假如,绿茶婊的目标变成女生......
  2. 你根本想象不到,学霸到底经历过什么
  3. 当代家长现状。。 | 今日最佳
  4. 马斯克和贝索斯的“星球大战”
  5. 入门机器学习,这一步必不可少!
  6. python 空指针_Python&CType空指针错误
  7. oracle+11g+rda,Oracle RDA 4.20 初体验
  8. linux ubuntu 开启ssh服务,开启SSH服务远程登录ubuntu
  9. java导入导出excel_Java导入导出Excel工具 easyexcel
  10. HTML阅读位置,script在HTML文档中位置