poj3259 Wormholes flord判负环

本文探讨了在一个包含特殊路径和虫洞的农场中,是否存在一种路径组合能让旅行者回到起点的同时也回到了过去的时间点。利用Floyd算法检测图中是否存在负权环,进而判断是否有可能实现时间旅行。

Wormholes
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 46744 Accepted: 17292

Description

While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that delivers you to its destination at a time that is BEFORE you entered the wormhole! Each of FJ's farms comprises N (1 ≤ N ≤ 500) fields conveniently numbered 1..NM (1 ≤ M ≤ 2500) paths, and W (1 ≤ W ≤ 200) wormholes.

As FJ is an avid time-traveling fan, he wants to do the following: start at some field, travel through some paths and wormholes, and return to the starting field a time before his initial departure. Perhaps he will be able to meet himself :) .

To help FJ find out whether this is possible or not, he will supply you with complete maps to F (1 ≤ F ≤ 5) of his farms. No paths will take longer than 10,000 seconds to travel and no wormhole can bring FJ back in time by more than 10,000 seconds.

Input

Line 1: A single integer,  FF farm descriptions follow. 
Line 1 of each farm: Three space-separated integers respectively:  NM, and  W 
Lines 2.. M+1 of each farm: Three space-separated numbers ( SET) that describe, respectively: a bidirectional path between  S and  E that requires  T seconds to traverse. Two fields might be connected by more than one path. 
Lines  M+2.. M+ W+1 of each farm: Three space-separated numbers ( SET) that describe, respectively: A one way path from  S to  E that also moves the traveler back  T seconds.

Output

Lines 1.. F: For each farm, output "YES" if FJ can achieve his goal, otherwise output "NO" (do not include the quotes).

Sample Input

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

Sample Output

NO
YES

Hint

For farm 1, FJ cannot travel back in time. 
For farm 2, FJ could travel back in time by the cycle 1->2->3->1, arriving back at his starting location 1 second before he leaves. He could start from anywhere on the cycle to accomplish this.

Source


题意:少年在农场里发现了虫洞,虫洞就是能让人穿越回到过去。少年很兴奋,他想通过穿越虫洞来遇见过去的自己,题目会给我们m条路,每条路参数a、b、c代表从a点到b点是连通的并且从a点走到b点花费c秒时间。w条虫洞,参数a、b、c代表点a到点b为虫洞并且可以往前回溯c秒,我们需要判断少年是否能遇见过去的自己

看完题目的时候我还以为时间回溯到过去的时候少年所在的点也是要相同的才行,但是其实没有这么复杂,只需要时间是负的即可。那么就是在这个图中寻找负环的存在

为什么会把判断dis【i】【i】写在 j 循环后面 i 循环里面呢?是应该在更新自身到自身的点后来判断是否存在负环吗?

还不熟悉,多写一点吧。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
using namespace std;
const int maxn = 510;
const int INF = 0x3f3f3f3f;
int n,m,w;
int dis[maxn][maxn];
void init(){
    int i,j;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            if(i==j){
                dis[i][j] = 0;
            }else{
                dis[i][j] = INF;
            }
        }
    }
}
bool floyd(){
    int i,j,k;
    for(k=1;k<=n;k++){
        for(i=1;i<=n;i++){
            for(j=1;j<=n;j++){
                if(dis[i][j]>dis[i][k]+dis[k][j]){
                    dis[i][j] = dis[i][k]+dis[k][j];
                    //cout<<i<<" "<<j<<" "<<dis[i][j]<<endl;
                }
            }
            if(dis[i][i]<0){
                //flag = true;
                return true;
            }
        }
    }
    return false;
}
int main(){
    int t,i,j;
    scanf("%d",&t);
    while (t--) {
        scanf("%d%d%d",&n,&m,&w);
        init();
        int a,b,c;
        for(i=1;i<=m;i++){
            scanf("%d%d%d",&a,&b,&c);
            dis[a][b] = min(dis[a][b],c);
            dis[b][a] = min(dis[b][a],c);
        }
        for(i=1;i<=w;i++){
            scanf("%d%d%d",&a,&b,&c);
            dis[a][b] = -c;
        }
        
        if(floyd()){
            printf("YES\n");
        }else{
            printf("NO\n");
        }
        
    }
    return 0;
}





(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值