zoukankan      html  css  js  c++  java
  • Codeforces Round #625 (Div. 1, based on Technocup 2020 Final Round)B(反向建图,BFS最短路)

    反向建图,边权为1,bfs跑最短路,记录分叉个数。

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 int a[200007];
     5 int dis[200007];
     6 int vis[200007];
     7 struct node{
     8     int v,next_;
     9 }e[200007];
    10 int cnt=0;
    11 int last[200007];
    12 void add_edge(int x,int y){
    13     e[++cnt].v=y;
    14     e[cnt].next_=last[x];
    15     last[x]=cnt;
    16 }
    17 int num[200007];
    18 void bfs(int x){
    19     dis[x]=1;
    20     num[x]=1;
    21     queue<int>q;
    22     q.push(x);
    23     while(!q.empty()){
    24         int u=q.front();
    25         q.pop();
    26         for(int i=last[u];i;i=e[i].next_){
    27             int v=e[i].v;
    28             if(dis[v]==0){
    29                 q.push(v);
    30                 dis[v]=dis[u]+1;
    31             }
    32             if(dis[v]==dis[u]+1)
    33                 ++num[v];//分叉个数
    34         }
    35     }
    36 }
    37 int mn=0,mx=0;
    38 int main(){
    39     ios::sync_with_stdio(false);
    40     cin.tie(NULL);
    41     cout.tie(NULL);
    42     int n,m;
    43     cin>>n>>m;
    44     for(int i=1;i<=m;++i){
    45         int x,y;
    46         cin>>x>>y;
    47         add_edge(y,x);
    48     }
    49     int k;
    50     cin>>k;
    51     for(int i=1;i<=k;++i)
    52         cin>>a[i];
    53     bfs(a[k]);
    54     for(int i=2;i<=k;++i){
    55         if(dis[a[i-1]]!=dis[a[i]]+1){//不是最短路,一定可以分叉
    56             ++mx;
    57             ++mn;
    58         }
    59         else if(num[a[i-1]]>1)//当前结点有多个分叉可选,只影响最大值
    60             ++mx;
    61     }
    62     cout<<mn<<" "<<mx;
    63     return 0;
    64 }
  • 相关阅读:
    F. Maximum White Subtree 树形dp*换根
    D
    E
    两圆相交板子
    lucass定理
    高精度求组合数
    康托展开与康托逆展开
    FFT变换
    Codeforces Round #625 Div. 1 Problem C
    E.Multiply Pollard_rho质因数分解
  • 原文地址:https://www.cnblogs.com/ldudxy/p/12394583.html
Copyright © 2011-2022 走看看