• POJ_1523 SPF (Tarjan 求割点)


      题意:求割点,并求出割点删掉后剩下的连通块数

    渣代码:

    View Code
     1 #include <iostream>
    2 #include <cstring>
    3 #include <cstdio>
    4
    5 using namespace std;
    6
    7 const int N = 1005;
    8 const int M = 100000;
    9 const int inf = ~0u>>2;
    10
    11 struct node {
    12 int to;
    13 int next;
    14 } g[M];
    15
    16 int head[N], cut[N];
    17 int dfn[N], low[N];
    18 int t, ind, rot, r_son;
    19 bool vis[N];
    20
    21 void init() {
    22 memset(head, 0, sizeof(head));
    23 memset(cut, 0, sizeof(cut));
    24 memset(dfn, 0, sizeof(dfn));
    25 memset(low, 0, sizeof(low));
    26 memset(vis, 0, sizeof(vis));
    27 t = 1; r_son = ind = 0;
    28 }
    29
    30 void add(int u, int v) {
    31 g[t].to = v; g[t].next = head[u]; head[u] = t++;
    32
    33 }
    34
    35 void tarjan(int u) {
    36 int v, i;
    37 dfn[u] = low[u] = ++ind;
    38 for(i = head[u]; i; i = g[i].next) {
    39 v = g[i].to;
    40 if(!dfn[v]) {
    41 tarjan(v);
    42 //printf("%d %d\n", u, v);
    43 if(u == rot) r_son++;
    44 else {
    45 low[u] = min(low[u], low[v]);
    46 if(low[v] >= dfn[u]) cut[u]++;
    47 }
    48 }
    49 else {
    50 low[u] = min(low[u], dfn[v]);
    51 }
    52 }
    53 }
    54
    55 int main() {
    56 //freopen("data.in", "r", stdin);
    57
    58 int u, v, cas = 0;
    59 int MIN, MAX, i;
    60 bool f;
    61 while(scanf("%d", &u), u) {
    62 init();
    63 MIN = inf; MAX = -1;
    64 scanf("%d", &v);
    65 add(u, v); add(v, u);
    66
    67 MIN = min(MIN, min(u, v));
    68 MAX = max(MAX, max(u, v));
    69
    70 while(scanf("%d", &u), u) {
    71 scanf("%d", &v);
    72 add(u, v); add(v, u);
    73
    74 MIN = min(MIN, min(u, v));
    75 MAX = max(MAX, max(u, v));
    76 }
    77 rot = MIN;
    78 tarjan(rot);
    79 cut[rot] = r_son - 1;
    80 printf("Network #%d\n", ++cas);
    81
    82 for(f = false, i = MIN; i <= MAX; i++) {
    83 if(cut[i]) {
    84 f = true;
    85 printf(" SPF node %d leaves %d subnets\n", i, cut[i] + 1);
    86 }
    87 }
    88 if(!f) printf(" No SPF nodes\n");
    89 cout << endl;
    90 }
    91 return 0;
    92 }



  • 相关阅读:
    C#下水晶报表打印自定义纸张
    设计模式应用之一:控件清空
    自定义StyleCop规则
    1.redis安装 单机
    dubbo个人总结
    spring+redis 集群下的操作
    mybatis调用存储过程 无参、带有输入输出参数,输出游标类型的 存储
    spring framework核心框架体系结构
    oracle‘s package,function,proceture编译时无响应(解决)
    Oracle 在线重定义表分区
  • 原文地址:https://www.cnblogs.com/vongang/p/2348011.html
Copyright © 2020-2023  润新知