首页 > 其他分享 >ABC211D Number of Shortest paths

ABC211D Number of Shortest paths

时间:2023-09-29 14:56:42浏览次数:42  
标签:paths head int 短路 Number edge num Shortest dis

分析

一道显然的最短路,用 dijkstra 算法。

计算最短路的同时,保存最短路个数,如果与当前最短路相同,最短路个数相加,否则到这个节点的最短路个数为上一个节点的最短路个数。

Accepted Code

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
const int mod = 1e9 + 7;
struct Edge{
	int v, nxt;
}edge[N * 2];
int head[N], vis[N], cnt;
long long num[N], dis[N];
void add_edge(int u, int v){edge[++cnt] = (Edge){v, head[u]}; head[u] = cnt;}
void dijkstra(int s)
{
    memset(dis, 0x3f3f3f3f, sizeof(dis));
    priority_queue<pair<int, int> > q;
    dis[s] = 0; num[s] = 1;
    q.push(make_pair(0, s));
    while (!q.empty())
    {
        int u = q.top().second;
        q.pop();
        if (vis[u])continue;
        vis[u] = 1;
        for (int i = head[u]; i; i = edge[i].nxt)
        {
            int v = edge[i].v;
            if (dis[v] < dis[u] + 1)continue;
            if (dis[v] == dis[u] + 1)num[v] += num[u];
            else dis[v] = dis[u] + 1, num[v] = num[u];
            num[v] %= mod;
            q.push(make_pair(-dis[v], v));
        }
    }
}
int main()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int u, v;
        cin >> u >> v;
        add_edge(u, v); add_edge(v, u);
    }
    dijkstra(1);
    cout << num[n];
    return 0;
}

标签:paths,head,int,短路,Number,edge,num,Shortest,dis
From: https://www.cnblogs.com/Finish-juruo/p/17736991.html

相关文章

  • CF441E Valera and Number
    题目链接这道题一个朴素的思路就是:维护\(f_{i,j}\)表示第\(i\)轮后\(x=j\)的方案数。时间复杂度\(O(k\times2^k)\)。显然过不了。我们尝试寻找一个能抛开\(x\)的值域的做法。不妨重新设\(f_{i,j}\)表示第\(i\)轮结束时的\(x\),增加\(j\)之后期望的末尾\(0\)个......
  • 计算即时订单比例-首单使用开窗函数row_number()
    1需求即时订单和计划订单订单配送中,如果期望配送日期和下单日期相同,称为即时订单,如果期望配送日期和下单日期不同,称为计划订单。请从配送信息表(delivery_info)中求出每个用户的首单(用户的第一个订单)中即时订单的比例,保留两位小数,以小数形式显示。配送信息表delivery_info期望结......
  • F. Vasilije Loves Number Theory
    F.VasilijeLovesNumberTheory前提知识:d(n)表示数字n的正约数个数,gcd(a,b)表示a,b两者的最大公约数要点:问是否存在a,使得d(a*n)=n,gcd(n,a)=1,意思是n与a互质,则可得,d(a*n)=d(a)*d(n)=n则问题转化成n%d(n)==0?尽管d(n)<=1e9,但n可能很大,所以可以利用质因子来求点击查看......
  • nginx访问报错“maximum number of descriptors supported by select() is 1024 while
    1、问题背景 项目:一个人力的系统,主要用于考勤打卡环境:windowsservernginx版本:1.22 问题说明:当早上访问人数增加的时候,就会出现nginx的异常nginx的后台报错日志:maximumnumberofdescriptorssupportedbyselect()is1024whileconnectingtoupstream  ......
  • 【踩坑】JS/TS 整数明明没有超过 Number.MAX_VALUE,为啥精度还是丢失了?
    代码functioncalcKey(props){returnprops.reduce((key,prop,index)=>{constcode=prop[0]*(15+1)+prop[1];console.log(code);console.log(key);returnkey+code*Math.pow(1000,index);},0);}func......
  • mysql 查询时额外查询一个index列,类似sqlserver的ROW_NUMBER()
    --创建临时表CREATETEMPORARYTABLEtemp1AS(SELECT(@rowindex:=@rowindex+1)ASrowindex,a.city_id,b.nameas'city_name',a.dept_name,a.final_pointFROMaqjd_assessment_deptaJOINsys_citybona.city_id=b.idJOIN(SELECT(@rowindex:=......
  • [LeetCode] 1353. Maximum Number of Events That Can Be Attended 最多可以参加的会
    Youaregivenanarrayof events where events[i]=[startDayi,endDayi].Everyevent i startsat startDayi andendsat endDayi.Youcanattendanevent i atanyday d where startTimei<=d<=endTimei.Youcanonlyattendoneeventatanytime ......
  • 【刷题笔记】63. Unique Paths II
    题目Arobotislocatedatthetop-leftcornerofa m x n grid(marked'Start'inthediagrambelow).Therobotcanonlymoveeitherdownorrightatanypointintime.Therobotistryingtoreachthebottom-rightcornerofthegrid(marked'......
  • 告警日志出现"which is different from the number of indexes 4 defined in the MySQ
    问题描述:告警日志出现"whichisdifferentfromthenumberofindexes4definedintheMySQL"报错,如下所示:数据库:MySQL5.7.211、告警日志########################################ErrorDetail########################################23092121:30:00[ERROR]Tablet......
  • 》》》oracle中用row_number查询最早一条数据
    转载:SQL中row_number() over(partition by)的用法说明_Mysql_脚本之家(jb51.net)select*from{selectcj.xh,--学生学号cj.cj,--学生成绩cj.ks_sj,--考试时间row_number()over(partitionbycj.xhorderbycj.ks_sjdesc)numfromks_cjcj--考......