首页 > 其他分享 >P1821 [USACO07FEB] Cow Party S

P1821 [USACO07FEB] Cow Party S

时间:2024-03-29 23:30:05浏览次数:17  
标签:tmp dis1 dis2 Cow int h2 vis USACO07FEB P1821

[P1821 USACO07FEB] Cow Party S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

每次都求一遍从 u u u到 r r r的最短路时间开销很大。可以考虑建反图,从 r r r点开始进行最短路,这样就可以经过一次就得到所有的从 u u u到 r r r的最短路,之后再计算从 r r r到 u u u的最短路,两者相加就是一个来回。

代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 21;
int e[N], ne[N], h[N], idx,dis1[N],dis2[N],w[N],vis[N];
void add(int u,int v, int x) {
    e[idx] = v, ne[idx] = h[u], w[idx] = x, h[u] = idx++;
}
int e2[N], ne2[N], h2[N], idx2,w2[N];
void add2(int u, int v, int x) {
    e2[idx2] = v, ne2[idx2] = h2[u], w2[idx2] = x, h2[u] = idx2++;
}
int main()
{
    int n,m,r; cin>>n>>m>>r;
    memset(h, -1, sizeof(h));
    memset(h2, -1, sizeof(h2));
    for(int i  = 0; i < m; ++i) {
        int u,v,x; cin>>u>>v>>x;
        add(u,v,x);
        add2(v,u,x);
    }
    memset(dis1, 0x3f, sizeof(dis1));
    memset(dis2, 0x3f, sizeof(dis2));
    dis1[r] = 0;
    priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> q;
    q.push({0,r});
    while(q.size()) {
        auto tmp = q.top(); q.pop();
        int u = tmp.second, d = tmp.first;
        if(vis[u]) continue;
        vis[u] = 1;
        for(int i = h[u]; ~i; i = ne[i]) {
            int v = e[i], x = w[i];
            if(dis1[v] > d + x) {
                dis1[v] = d + x;
                q.push({dis1[v],v});
            }
        }
    }
    memset(vis, 0, sizeof(vis));
    dis2[r] = 0;
    q.push({0,r});
    while(q.size()) {
        auto tmp = q.top(); q.pop();
        int u = tmp.second, d = tmp.first;
        if(vis[u]) continue;
        vis[u] = 1;
        for(int i = h2[u]; ~i; i = ne2[i]) {
            int v = e2[i], x = w2[i];
            if(dis2[v] > d + x) {
                dis2[v] = d + x;
                q.push({dis2[v],v});
            }
        }
    }
    int res = 0;
    for(int i = 1; i <= n; ++i) {
        res = max(res, dis1[i] + dis2[i]);
    }
    cout<<res<<endl;
}

标签:tmp,dis1,dis2,Cow,int,h2,vis,USACO07FEB,P1821
From: https://blog.csdn.net/qq_63432403/article/details/137064073

相关文章

  • P2854 [USACO06DEC] Cow Roller Coaster S
    原题链接题解1.当没有花费限制的时候,我们可以将其抽象为简单的背包问题2.如果有了花费限制,那么我们就再加一维条件3.如果一个线段能用,那么它前面一定是铺满的,那我们令线段按起点排序,通过某种运算,保证放这个线段时,前面的线段组成是最优的比如在\(i\)点结尾位置花费\(j\)所......
  • iOS模拟器 Unable to boot the Simulator —— Ficow笔记
     本文首发于FicowShen'sBlog,原文地址:iOS模拟器UnabletoboottheSimulator——Ficow笔记。内容概览前言终结模拟器进程命令行改权限清除模拟器缓存总结 前言 iOS模拟器和Xcode一样不靠谱,问题也不少。......
  • Linux脏牛提权漏洞复现(DirtyCow)
    #简述脏牛(DirtyCow)是Linux中的一个提权漏洞。主要产生的原因是Linux系统的内核中Copy-on-Write(COW)机制产生的竞争条件问题导致,攻击者可以破坏私有只读内存映射,并提升为本地管理员权限。#前期准备靶机:vulnhub——Lampiao192.168.230.217攻击机:Kali192.168.230.128#复现......
  • P2742 [USACO5.1] 圈奶牛Fencing the Cows /【模板】二维凸包
    原题链接题解这么优质的文章我写什么题解好难解释必然性感觉像模拟??code#include<bits/stdc++.h>usingnamespacestd;intq[100005]={0};structnode{doublex,y;}a[100005];doubledis(intb,intc){nodei=a[b],j=a[c];returnsqrt((i.x-j.x)*(i.x-......
  • Linux脏牛提权漏洞复现(DirtyCow)
    #简述脏牛(DirtyCow)是Linux中的一个提权漏洞。主要产生的原因是Linux系统的内核中Copy-on-Write(COW)机制产生的竞争条件问题导致,攻击者可以破坏私有只读内存映射,并提升为本地管理员权限。#前期准备靶机:vulnhub——Lampiao192.168.230.217攻击机:Kali192.168.230.128#复现......
  • LibreOJ 3591 「USACO 2018.02 Platinum」Cow Gymnasts
    以\(0\)为初始下标。考虑到这个平台之间的转移不是很好处理,于是考虑换个角度,考虑每个高度。这里定义高度为\(i\)的奶牛就是下一次操作要走\(i\)步的奶牛。然后考虑去分析合法序列的性质。性质\(1\):高度为\(x\)的奶牛在移动后的高度依然为\(x\),即这个过程可以看作每......
  • MIT 6.S081入门lab6 cow
    MIT6.S081入门lab6cow由于本实验的前置课程包括2部分Interrupts和Multiprocessorsandlocking,因此本次实验记录也分为2部分一、参考资料阅读与总结1.xv6book书籍阅读(chapter5Interruptsanddevicedrivers)1.概述设备驱动程序:位置:操作系统;作用:配置设备,执行操作,处......
  • 制作Ubuntu qcow2镜像
    下载云主机镜像https://cloud-images.ubuntu.com/releases/wgethttps://cloud-images.ubuntu.com/releases/23.10/release-20240307/ubuntu-23.10-server-cloudimg-amd64.imgyuminstall-ylibvirt-clientcloud-utilsvirt-installlibguestfs-tools#创建模板镜像qemu-i......
  • P3047 [USACO12FEB] Nearby Cows G
    原题链接题解核心技巧:两次搜索第一次搜索:搜索出\(f[now][i]\)以\(now\)为根节点的子树且距离根节点恰好为\(i\)的节点的个数搜索完了之后,把范围\(k\)以内的累加第二次搜索:由于整棵树的根节点的\(f\)等于整棵树里距离不大于\(k\)的节点个数,即已经符合题目要求......
  • P2946 [USACO09MAR] Cow Frisbee Team S
    原题链接题解设\(sum\)为总能力则若\(sum\)是\(F\)的倍数\(\to\)\(sum\mod\F=0\)根据加法求模的特性,我们可以设\(dp[i][j]\)为加上第\(i\)个元素后,模为\(j\)的方案数转移方程移得注意一个细节:按照遍历顺序,每个元素要么不是一套方案的第一个元素,要么是所......