NOIP模拟赛 虫洞
【题目描述】
John在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前)。John的每个农场有M条小路(无向边)连接着N (从1..N标号)块地,并有W个虫洞(有向边)。其中1<=N<=500,1<=M<=2500,1<=W<=200。 现在John想借助这些虫洞来回到过去(出发时刻之前),请你告诉他能办到吗。 John将向你提供F(1<=F<=5)个农场的地图。没有小路会耗费你超过10000秒的时间,当然也没有虫洞回帮你回到超过10000秒以前。
【输入格式】
* Line 1: 一个整数 F, 表示农场个数。
* Line 1 of each farm: 三个整数 N, M, W。
* Lines 2..M+1 of each farm: 三个数(S, E, T)。表示在标号为S的地与标号为E的地中间有一条用时T秒的小路。
* Lines M+2..M+W+1 of each farm: 三个数(S, E, T)。表示在标号为S的地与标号为E的地中间有一条可以使John到达T秒前的虫洞。
【输出格式】
* Lines 1..F: 如果John能在这个农场实现他的目标,输出"YES",否则输出"NO"。
【样例输入】
2
3 3 1
1 2 2
1 3 4
2 3 1
3 1 3
3 2 1
1 2 3
2 3 4
3 1 8
【样例输出】
NO
YES
floyd判负环:好像会超时2个点
#include<iostream>
#include<cstring>
using namespace std; const int INF=;
const int MAXN=; int f,n,m,w;
int Dist[MAXN][MAXN],Graph[MAXN][MAXN];
int minn; void floyd()
{
memcpy(Graph,Dist,sizeof(Dist));
for(int k=;k<=n;k++)
{
for(int i=;i<k;i++)
for(int j=i+1;j<k;j++)
minn=min(minn,Dist[i][j]+Graph[j][k]+Graph[k][i]);
if(minn<) return;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
int temp=Dist[i][k]+Dist[k][j];
if(temp<Dist[i][j])
Dist[i][j]=temp;
}
}
} inline void Init()
{
minn=INF;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(i==j) Dist[i][j]=;
else Dist[i][j]=INF;
}
} int main()
{
scanf("%d",&f);
for(int Loop=;Loop<=f;Loop++)
{
scanf("%d %d %d",&n,&m,&w);
Init();
for(int i=;i<=m;i++)
{
int s,e,t;
scanf("%d %d %d",&s,&e,&t);
Dist[s][e]=Dist[e][s]=min(Dist[s][e],t);
}
for(int i=;i<=w;i++)
{
int s,e,t;
scanf("%d %d %d",&s,&e,&t);
Dist[s][e]=min(Dist[s][e],-t);
}
floyd();
if(minn<) printf("YES\n");
else printf("NO\n");
}
return ;
}
spfa判负环:
#include<iostream>
#include<cstring>
using namespace std; const int INF=;
const int MAXN=; struct Edge
{
int to,w,next;
}E[];
int node=,head[]; int f,n,m,w; int Dist[];
bool vis[];
bool flag; void insert(int u,int v,int w)
{
node++;
E[node]=(Edge){v,w,head[u]};
head[u]=node;
} void spfa_dfs(int s)
{
vis[s]=;
for(int i=head[s];i!=;i=E[i].next)
{
int to=E[i].to,w=E[i].w;
if(Dist[s]+w<Dist[to])
{
if(vis[to]){flag=;return;}
else
{
Dist[to]=Dist[s]+w;
spfa_dfs(to);
}
}
}
vis[s]=;
} bool check()
{
flag=;
memset(Dist,0x7f,sizeof(Dist));
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++)
{
Dist[i]=;
spfa_dfs(i);
if(flag) return ;
}
return ;
} int main()
{
scanf("%d",&f);
for(int Loop=;Loop<=f;Loop++)
{
scanf("%d %d %d",&n,&m,&w);
node=;
memset(head,,sizeof(head));
for(int i=;i<=m;i++)
{
int s,e,t;
scanf("%d %d %d",&s,&e,&t);
insert(s,e,t);insert(e,s,t);
}
for(int i=;i<=w;i++)
{
int s,e,t;
scanf("%d %d %d",&s,&e,&t);
insert(s,e,-t);
}
if(check()) printf("YES\n");
else printf("NO\n");
}
return ;
}
NOIP模拟赛 虫洞的更多相关文章
- 【最短路】NOIP模拟赛 虫洞
虫洞 [题目描述] N个虫洞,M条单向跃迁路径.从一个虫洞沿跃迁路径到另一个虫洞需要消耗一定量的燃料和1单位时间.虫洞有白洞和黑洞之分.设一条跃迁路径两端的虫洞质量差为delta. 1. 从白洞跃迁到 ...
- [noip模拟赛]虫洞holes<SPFA>
虫洞(holes.cpp/c/pas) [题目描述] N个虫洞,M条单向跃迁路径.从一个虫洞沿跃迁路径到另一个虫洞需要消耗一定量的燃料和1单位时间.虫洞有白洞和黑洞之分.设一条跃迁路径两端的虫洞质量差 ...
- NOIP模拟赛 6.29
2017-6-29 NOIP模拟赛 Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走, ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
随机推荐
- Vue中如何将数据传递到下一个页面(超级简单哒)
先展示效果:注意URL中值是有变化的 一:在goodslist.vue文件夹绑定 <router-link :to="'/goodsinfo/'+subitem.artID" ...
- Hdu1015&&寒假作业第二组I题
题意是A-Z对应1-26,然后给个目标数字和字符串,看看字符串里的某5个字符的组合能不能使v - w^2 + x^3 - y^4 + z^5 = target等式成立,其实多写几个循环也可以达到目的, ...
- jquery扩展方法详解
http://www.jb51.net/article/51079.htm https://www.cnblogs.com/xuxiuyu/p/5989743.html ---更详细
- 查询获取所有数据库名及数据库中表的集合、数据库连接字符串(类生成器,暂时支持mysql,sql server,后期有oracle再更新)
现所在公司做项目开发时,经常会自己创建model类,网上的生成器也很多,完全满足自己的不太现实,所以感觉自己做一个更有底气,主要针对过程中的一些语句进行整理,也供其他人学习参考. 连接字符串: mys ...
- 啊哈算法之宽搜BFS解救小哈
简述 本算法摘选自啊哈磊所著的<啊哈!算法>第四章第三节的题目——BFS算法再次解救小哈.文中代码使用C语言编写,博主通过阅读和理解,重新由Java代码实现了一遍,以此来理解BFS算法.关 ...
- vue学习之路之需要了解的知识汇总
一.vue是什么? 相关网页: https://vuejs.bootcss.com/v2/guide/ 及菜鸟教程 https://www.runoob.com/vue2/v ...
- spring中自动装配bean
首先用@Component注解类: package soundsystem: import org.springframework.stereotype.Component; @Component p ...
- js浮点数乘除法
JS在处理浮点数计算时经常会遇到精度的问题,上一篇博客封装了JS浮点数加减法的方法,这一次来封装一下js浮点数乘除法运算. 其实浮点除法的封装跟加减法的封装原理是一样,只是在第一次计算完后会再复位小数 ...
- vue使用uglifyjs-webpack-plugin后打包报错
楼主最新对已做项目进行打包优化,配置了打包环境下去除console.log语句插件---使用uglifyjs-webpack-plugin具体代码如下 npm install uglifyjs-web ...
- informix服务端卸载后重新安装不成功
可能原因: 1.实例未删除 2.配置文件未删除 安装成功后远程客户端连接不上问题: 1..如果自己设置的数据库实例报错,换一个数据库实例(database)试试,例如sysadmin