• [洛谷1346]电车


    思路:

    将问题抽象成一张图。需要切开关则边权是1。求单源最短路即可。
    (由于数据水,所以暴力也能过)

     1 #include<cstdio>
     2 #include<cctype>
     3 #include<vector>
     4 #include<algorithm>
     5 #include<functional>
     6 #include<ext/pb_ds/priority_queue.hpp>
     7 inline int getint() {
     8     char ch;
     9     while(!isdigit(ch=getchar()));
    10     int x=ch^'0';
    11     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
    12     return x;
    13 }
    14 const int N=101,inf=0x7fffffff;
    15 struct Edge {
    16     int to,w;
    17     bool operator > (const Edge &x) const {
    18         return w>x.w;
    19     }
    20 };
    21 std::vector<int> e[N];
    22 int w[N][N];
    23 inline void add_edge(const int u,const int v,const int ww) {
    24     e[u].push_back(v);
    25     w[u][v]=ww;
    26 }
    27 int d[N]= {0};
    28 bool v[N]= {0};
    29 int main() {
    30     int n=getint(),a=getint(),b=getint();
    31     for(int i=1; i<=n; i++) {
    32         int k=getint();
    33         for(int j=0; j<k; j++) {
    34             add_edge(i,getint(),j?1:0);
    35         }
    36     }
    37     __gnu_pbds::priority_queue<Edge,std::greater<Edge> > q;
    38     __gnu_pbds::priority_queue<Edge,std::greater<Edge> >::point_iterator p[n+1];
    39     for(int i=1; i<=n; i++) p[i]=q.push((Edge){i,d[i]=(i==a)?0:inf});
    40     for(int i=0; i<n; i++) {
    41         Edge u=q.top();
    42         if(u.w==inf) break;
    43         for(unsigned int j=0; j<e[u.to].size(); j++) {
    44             if(v[e[u.to][j]]) continue;
    45             int &v=e[u.to][j];
    46             q.modify(p[v],(Edge) {
    47                 v,d[v]=std::min(p[v]->w,u.w+w[u.to][v])
    48             });
    49         }
    50         q.modify(p[u.to],(Edge){u.to,inf});
    51         v[u.to]=true;
    52     }
    53     printf("%d
    ",(d[b]==inf)?-1:d[b]);
    54     return 0;
    55 }
  • 相关阅读:
    Jmeter的两种录制脚本的方式
    【.NET】设置EntityFramework中decimal类型数据精度 [转]
    vscode格式化vue不换行
    mysql5.7 noinstall 安装 【转载】
    配置STP、RSTP以及负载均衡
    配置3层交换机VLAN间通信
    配置单臂路由
    配置DTP
    配置trunk
    配置VLAN
  • 原文地址:https://www.cnblogs.com/skylee03/p/7241355.html
Copyright © 2020-2023  润新知