zoukankan      html  css  js  c++  java
  • P2296-寻找道路

      1 #include <bits/stdc++.h>
      2 #define _for(i,a,b) for(int i = (a);i < b;i ++)
      3 #define _rep(i,a,b) for(int i = (a);i > b;i --)
      4 #define INF 0x3f3f3f3f
      5 #define MOD 1000000007
      6 #define maxn 200003
      7 typedef long long ll;
      8 
      9 using namespace std;
     10 typedef pair<int,int> P;//first 是最短距离,second 是顶点编号
     11 inline ll read()
     12 {
     13     ll ans = 0;
     14     char ch = getchar(), last = ' ';
     15     while(!isdigit(ch)) last = ch, ch = getchar();
     16     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
     17     if(last == '-') ans = -ans;
     18     return ans;
     19 }
     20 inline void write(ll x)
     21 {
     22     if(x < 0) x = -x, putchar('-');
     23     if(x >= 10) write(x / 10);
     24     putchar(x % 10 + '0');
     25 }
     26 int V,E;
     27 int st,ed;
     28 int ver[maxn],Next[maxn],head[maxn],val[maxn];
     29 int ver1[maxn],Next1[maxn],head1[maxn],val1[maxn];
     30 int novis[maxn];
     31 int cango[maxn];
     32 int vis[maxn];
     33 int tot = 0,tot1 = 0;
     34 void add(int x,int y,int w)
     35 {
     36     ver[++tot] = y,Next[tot] = head[x],head[x] = tot,val[tot] = w;
     37 }
     38 void add1(int x,int y,int w)
     39 {
     40     ver1[++tot1] = y,Next1[tot1] = head1[x],head1[x] = tot1,val1[tot1] = w;
     41 }
     42 int d[maxn];
     43 void shortest_path(int s)
     44 {
     45     priority_queue<P,vector<P>,greater<P>> que;
     46 
     47     _for(i,1,V+1)
     48     d[i] = INF;
     49     d[s] = 0;
     50     que.push(P {0,s});
     51 
     52     while(!que.empty())
     53     {
     54         P p = que.top();
     55         que.pop();
     56         int v = p.second;
     57         if(novis[v] || d[v] < p.first) continue;
     58         for(int i = head[v]; i; i = Next[i])
     59         {
     60             int y = ver[i];
     61             int w = val[i];
     62             if(d[y] > d[v] + w)
     63             {
     64                 d[y] = d[v] + w;
     65                 que.push(P {d[y],y});
     66             }
     67         }
     68     }
     69 }
     70 
     71 bool dfs(int s)
     72 {
     73     cango[s] = 1;
     74     for(int i = head1[s]; i; i = Next1[i])
     75     {
     76         int y = ver1[i];
     77         if(!vis[y])
     78         {
     79             vis[y] = 1;
     80             dfs(y);
     81         }
     82     }
     83 }
     84 bool dfs2(int s)
     85 {
     86     for(int i = head[s]; i; i = Next[i])
     87     {
     88         int y = ver[i];
     89         if(!cango[y])
     90             novis[s] = 1;
     91         if(!vis[y])
     92         {
     93             vis[y] = 1;
     94             dfs2(y);
     95         }
     96     }
     97 }
     98 int main()
     99 {
    100 //    freopen("testdata.in","r+",stdin);
    101     V = read(),E = read();
    102     _for(i,1,E+1)
    103     {
    104         int a = read();
    105         int b = read();
    106         add(a,b,1);
    107         add1(b,a,1);
    108     }
    109     st = read();
    110     ed = read();
    111     dfs(ed);
    112     memset(vis,0,sizeof(vis));
    113     dfs2(st);
    114 /*
    115     printf("
    ");
    116     _for(i,1,V+1)
    117     printf("%d %d %d
    ",i,novis[i],cango[i]);
    118 */
    119     
    120     shortest_path(st);
    121     if(d[ed]==INF)
    122         printf("%d
    ",-1);
    123     else
    124         printf("%d
    ",d[ed]);
    125     return 0;
    126 }
  • 相关阅读:
    android中实现监听的四种方法
    Jpgraph小应用
    正则表达式的初运用-认证界面
    Oracle案例04——TNS-12547: TNS:lost contact
    通过触发器记录数据库连接信息
    MySQL案例02:ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
    Oracle案例04——ORA-39700: database must be opened with UPGRADE option
    Oracle案例03——RMAN-06091: no channel allocated for maintenance (of an appropriate type)
    Xwiki安装部署详解
    MySQL案例01:Last_SQL_Errno: 1755 Cannot execute the current event group in the parallel mode
  • 原文地址:https://www.cnblogs.com/Asurudo/p/11617272.html
Copyright © 2011-2022 走看看