首页 > 其他分享 >P2865 [USACO06NOV] Roadblocks G

P2865 [USACO06NOV] Roadblocks G

时间:2023-12-26 19:23:26浏览次数:45  
标签:5005 int vis Roadblocks P2865 push USACO06NOV now

原题链接

题解

1.在处理最短路的时候,我们采用优先队列的方法,即第一个出现的点一定是最小的,之后出现的点都是在其他点的基础上叠加的值,肯定不小于第一个。那么依然是这个思路,第二个出现的点一定是次短的。

代码

#include<bits/stdc++.h>
using namespace std;
struct unit
{
    int pos;
    int val;
    bool operator<(const unit other)const
    {
        return other.val<val;
    }
};
vector<unit> G[5005];
void add(int x,int y,int v)
{
    G[x].push_back({y,v});
    G[y].push_back({x,v});
}
int main()
{
    int n,r;
    cin>>n>>r;
    for(int i=1;i<=r;i++)
    {
        int u,v,d;
        cin>>u>>v>>d;
        add(u,v,d);
    }

    int dis[5005];
    int vis[5005];
    for(int i=1;i<=n;i++)vis[i]=2;
    memset(dis,0x3f3f3f,sizeof(dis));
    priority_queue<unit> q;
    q.push({1,0});
    while(!q.empty())
    {
        int now=q.top().pos;
        int v=q.top().val;
        q.pop();
        if(!vis[now])continue;
        vis[now]--;
        dis[now]=v;
        for(int i=0;i<G[now].size();i++)
        {
            int next=G[now][i].pos;
            if(vis[next]) q.push({next,v+G[now][i].val});
        }
    }
    cout<<dis[n];
    return 0;
}

标签:5005,int,vis,Roadblocks,P2865,push,USACO06NOV,now
From: https://www.cnblogs.com/pure4knowledge/p/17929131.html

相关文章

  • P1090 [NOI洛谷P2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
    可以用堆来实现,或者更简单一点的优先队列优先队列:#include<queue>priority_queue<int,vector<int>,greater<int>>q;因为每次合并后,最小的两个值都会更新,所以可以很好的利用优先队列内元素有序的特点,减少因反复排序带来的时间复杂度;一开始我用STL自带的排序sort,报了5个TLE,后来意......
  • [USACO06NOV]Bad Hair Day S(栈)
    题目大意:按顺序给出n头牛的身高,每头牛可以看见它到后出现的牛中第一头身高高过(大于等于)它的牛之间的所有牛,求所有牛总共能看到的牛数解题思路:从后往前遍历查看每头牛能看到的牛数,每次进行的比较数量的太多,但我们可以用栈来存储关键信息以减少不必要的比较代码如下:#i......
  • 【题解】Luogu[P1879] [USACO06NOV]Corn Fields G
    Link→状压dp典题,看数据范围就能多半猜到是状压。\(M\)行\(N\)列很不舒服,本篇题解规定为\(N\)行\(M\)列。因为说没有哪两块草地相连,我们不妨一行一行考虑,一行中每格只可能是\(0\)或\(1\),所以一行的总不同状态数是\(2^M\)。我们用二进制表示每一行的状态,对于每一行,暴......
  • 做题笔记:次短路(P2865)
    虽然算法难度达不到记笔记的级别但由于个人认为较为重要,故作记录。抓住最短路和次短路的一个区别,最少一条边不同。所以不妨正反(\(1\)和\(n\))分别跑最短路。然后枚......
  • POJ--3255 Roadblocks(最短路)
    记录0:252023-1-27http://poj.org/problem?id=3255reference:《挑战程序设计竞赛(第2版)》2.4.4p108DescriptionBessiehasmovedtoasmallfarmandsometimese......
  • poj3255 Roadblocks--次短路spfa
    原题链接:​​http://poj.org/problem?id=3255​​题意:n个点,标号为1到n,m条路,u,v,len,表示u与v之间路长为len,求1到n第二短路长,题目保证存在第二短路径。#define_CRT_SECURE_NO_D......
  • P2865 [USACO06NOV]Roadblocks G
    #include<bits/stdc++.h>usingnamespacestd;#definepiipair<int,int>#definempmake_pairpriority_queue<pii,vector<pii>,greater<pii>>q;i......