首页 > 编程语言 >C++ WZOI P2833农场派对

C++ WZOI P2833农场派对

时间:2024-11-23 15:31:07浏览次数:11  
标签:loc 头牛 派对 int 农场 P2833 C++ WZOI dis

农场派对

提交数: 183, 通过率: 13.11%, 平均分: 69.28

题目描述:

N头牛都要去参加一场在编号为X(1≤X≤N)的牛的农场举行的派对(1≤N≤3000),农场之间有M(1≤M≤100,000)条有向路,每条路长Ti(1≤Ti≤100)。

每头牛参加派对后都必须回到家,每头牛都会选择最短路。求这N头牛的最短路(一个来回)中最长的一条的长度。

输入格式:

第一行,3个空格分开的整数N,M,X。

第二行到M+1行: 3个用空格分开的整数Ai,Bi,Ti,表示有一条从Ai到Bi的路,长度为Ti。

输出格式:

一行,最长的最短路的长度。

样例输入:
4 8 2
1 2 4
1 3 2
1 4 7
2 1 1
2 3 5
3 1 2
3 4 4
4 2 3
样例输出:
10

时间限制: 1000ms
空间限制: 256MB

这道题我看了很多博客代码,结果在WZOI上都TLE90挂掉,下面代码爱搬走搬走~  我就不说了

摘要

本题要求计算所有从各自农场前往编号为 X 的牛的农场参加派对并返回的牛中,最短往返路径长度的最大值。农场之间由 M 条有向道路连接,每条道路都有对应的长度,每头牛都会选择往返的最短路径。目标是找到这些最短路径中最长的一个距离。

关键点

  • N头牛(1≤N≤3000)需要参加在编号为X的牛的农场举行的派对。
  • 农场之间有M条有向道路(1≤M≤100,000),每条道路长度为Ti(1≤Ti≤100)。
  • 每头牛在参加派对后都必须返回自己的农场。
  • 每头牛都会选择从自己农场到X号农场的最短路径,以及返回的最短路径。
  • 问题要求找出所有牛的往返最短路径中长度最长的一条。
  • 输入包括农场数量、道路数量、派对农场编号,以及每条道路的详细信息。
  • 输出需要计算并输出最长的最短往返路径长度。
    #include <bits/stdc++.h>  
    using namespace std;  
    
    #define PII pair<int, int>  
    #define INF INT_MAX   // 使用系统的最大值定义  
    const int N = 3005;  // 修改为3005以涵盖1到3000的所有节点  
    int dis[N][2], n, x, m;  
    struct Node {  
        int v, w;  
    };  
    vector<Node> E[2][N];  
    bool vis[N];  
    
    void DJ(int s, int loc) {  
        memset(vis, 0, sizeof vis);  
        
        priority_queue<PII, vector<PII>, greater<PII>> que;  
        que.push({0, s});  
        dis[s][loc] = 0;  
    
        while (!que.empty()) {  
            int t = que.top().second;  
            que.pop();  
            if (vis[t]) continue;  
            vis[t] = true;  
    
            for (Node &node : E[loc][t]) {  
                int j = node.v;  
                int w = node.w;  
                // 我们只在未访问的节点上更新距离  
                if (dis[j][loc] > dis[t][loc] + w) {  
                    dis[j][loc] = dis[t][loc] + w;  
                    que.push({dis[j][loc], j});  
                }  
            }  
        }  
    }  
    
    int main() {  
        memset(dis, 0x3f, sizeof dis);  // Initialize distances to a large number  
        cin >> n >> m >> x;  
        int u, v, w;  
        for (int i = 0; i < m; ++i) {  
            cin >> u >> v >> w;  
            E[0][u].push_back({v, w});  // Build the forward graph  
            E[1][v].push_back({u, w});  // Build the reverse graph  
        }  
    
        // Calculate shortest path from X to all nodes (forward direction)  
        DJ(x, 0);  
        // Calculate shortest path from all nodes to X (reverse direction)  
        DJ(x, 1);  
    
        int ans = 0;  
        // Calculate the longest shortest round trip distance  
        for (int i = 1; i <= n; ++i)  
            ans = max(dis[i][0] + dis[i][1], ans);  
    
        cout << ans << endl;  
    
        return 0;  
    }

标签:loc,头牛,派对,int,农场,P2833,C++,WZOI,dis
From: https://blog.csdn.net/A4521367894/article/details/143837108

相关文章

  • CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes
    CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5]回文质数PrimePalindromes题目描述因为151151151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),......
  • C++ 标准模板库(STL)——queue的使用
    目录一、描述二、初始化1、包含的头文件2、变量初始化三、函数1、构造函数2、成员函数四、插入元素五、删除元素六、访问元素七、修改元素八、示例代码九、注意事项十、总结一、描述STL(StandardTemplateLibrary)是C++标准库的一部分,它提供了一系列容......
  • C++ 标准模板库(STL)——set的使用
    目录一、描述二、创建和初始化三、插入元素四、删除元素五、查找元素六、遍历元素七、大小和空判断八、迭代器九、自定义比较函数十、其他函数十一、注意事项一、描述std::set是C++STL中的一个关联容器,用于存储唯一的元素,并且这些元素是按照某种顺序排列......
  • 打卡信奥刷题(290)用C++工具信奥P2347[普及组/提高] [NOIP1996 提高组] 砝码称重
    [NOIP1996提高组]砝码称重题目描述设有1g1\mathrm{g}1g、2g......
  • c++等级考试第8级第2卷
                                       道路(2024.3八级)代码#include<iostream>#include<algorithm>#include<cmath>#include<cstdio>#include<vector>#include<cstring>usingnamespacestd;st......
  • C++学习笔记-Cherno C++系列
    21-23.【ChernoC++】C++中的静态(static)static变量只在编译单元内部链接静态变量的作用域只在单个文件内建议:在非特殊情况下,永远使用static定义全局变量以限制作用域全局变量重复定义/*a.cpp*/intg_Variable=5;/*main.cpp*/#include<iostream>intg_V......
  • vscode的C++引用头文件总是报错,网上教程都试了还是没用,请来这里。
    本教程跟网上大部分教程大同小异。(节省时间:在编辑task.json文件时只需写头文件路径,一定不要写源文件路径即可,其余步奏跟其他人的相同)若成功解决问题,希望可以给小编一个赞其中一些操作看不懂的可以先看其他人的步奏,如:适合初学者!超详细的vscode的C++自定义头文件的配置!_vscod......
  • C++提高编程-STL
    STL初识容器算法迭代器初识vector存放内置数据类型#include<vector>#include<algorithm>voidmyPrint(intx){ cout<<x<<'';}voidtest01(){ //创建vector容器 vector<int>v; //向容器中插入数据 v.push_back(10); v.push_back(20); v.......
  • C++游戏开发
    C++是一种常用的编程语言,广泛应用于游戏开发领域。在使用C++进行游戏开发时,可以利用C++的面向对象特性、高性能和可移植性来创建游戏。以下是C++游戏开发的详细步骤:设计游戏的概念和目标:在开始游戏开发之前,你需要明确游戏的概念和目标,包括游戏的类型、玩法、关卡设计等。这......
  • 【GESP】C++一级练习 luogu-B2060, 满足条件的数累加
    一级知识点循环和取余操作练习题,基础练习。题目题解详见:https://www.coderli.com/gesp-1-luogu-b2060/【GESP】C++一级练习luogu-B2060,满足条件的数累加|OneCoder一级知识点循环和取余操作练习题,基础练习。https://www.coderli.com/gesp-1-luogu-b2060/......