<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      割點模板

      // 2割點.cpp : 此文件包含 "main" 函數。程序執行將在此處開始并結束。
      //
      
      /*
      http://oj.daimayuan.top/course/23/problem/984
      
      給一個n個點m條邊的無向連通圖,從小到大輸出所有割點的編號。
      
      輸入格式
      第一行包含兩個數n,m(1≤n≤105,1≤m≤2×105)。
      
      接下來m行,每行兩個整數u,v表示一條無向邊,沒有自環,但可能有重邊。
      
      輸出格式
      首先輸出一個整數,表示割點個數。接下來一行,若干個從小到大的數,表示割點的編號。
      
      樣例輸入
      7 8
      1 2
      2 3
      3 4
      2 5
      4 5
      5 6
      5 7
      5 7
      樣例輸出
      2
      2 5
      */
      #include <iostream>
      #include <algorithm>
      #include <vector>
      #include <cstring>
      
      
      using namespace std;
      
      const int SIZE = 100010;
      int head[SIZE], ver[SIZE * 4], Next[SIZE * 4];
      int dfn[SIZE], low[SIZE], stack[SIZE];
      int n, m, tot, num, root;
      bool cut[SIZE];
      
      void add(int x, int y) {
          ver[++tot] = y, Next[tot] = head[x], head[x] = tot;
      }
      
      void tarjan(int x) {
          dfn[x] = low[x] = ++num;
          int flag = 0;
          for (int i = head[x]; i; i = Next[i]) {
              int y = ver[i];
              if (!dfn[y]) {
                  tarjan(y);
                  low[x] = min(low[x], low[y]);
                  if (low[y] >= dfn[x]) {
                      flag++;
                      if (x != root || flag > 1) cut[x] = true;
                  }
              }
              else {
                  low[x] = min(low[x], dfn[y]);
              }
          }
      
      }
      
      
      int main()
      {
          cin >> n >> m;
          tot = 1;
          for (int i = 1; i <= m; i++) {
              int x, y;
              cin >> x >> y;
              if (x == y)continue;
              add(x, y); add(y, x);
          }
          for (int i = 1; i <= n; i++)
              if (!dfn[i]) root = i, tarjan(i);
          vector<int> ans;
          for (int i = 1; i <= n; i++){
              if (cut[i]) {
                  ans.push_back(i);
              }
          }
          cout << ans.size() << endl;
          for (int i = 0; i < ans.size(); i++) {
              cout << ans[i] << " ";
          }
       
      
      
          return 0;
      }
      
      // 割點.cpp : 此文件包含 "main" 函數。程序執行將在此處開始并結束。
      //
      /*
      http://oj.daimayuan.top/course/23/problem/984
      
      給一個n個點m條邊的無向連通圖,從小到大輸出所有割點的編號。
      
      輸入格式
      第一行包含兩個數n,m(1≤n≤105,1≤m≤2×105)。
      
      接下來m行,每行兩個整數u,v表示一條無向邊,沒有自環,但可能有重邊。
      
      輸出格式
      首先輸出一個整數,表示割點個數。接下來一行,若干個從小到大的數,表示割點的編號。
      
      樣例輸入
      7 8
      1 2
      2 3
      3 4
      2 5
      4 5
      5 6
      5 7
      5 7
      樣例輸出
      2
      2 5
      */
      
      
      #include <iostream>
      #include <cstring>
      #include <algorithm>
      #include <vector>
      
      using namespace std;
      
      const int N = 100010, M = 400010;
      int h[N], e[M], ne[M], idx;
      int dfn[N], low[N], timestamp;
      int stk[N];
      int n, m, root;
      bool cut[N];
      
      void add(int a, int b) {
      	e[idx] = b, ne[idx] = h[a], h[a] = idx++;
      }
      
      void tarjan(int u) {
      	dfn[u] = low[u] = ++timestamp;
      	int flag = 0;
      
      	for (int i = h[u]; i != -1; i = ne[i]) {
      		int k = e[i];
      		if (!dfn[k]) {
      			tarjan(k);
      			low[u] = min(low[u], low[k]);
      			if (low[k] >= dfn[u]) {
      				flag++;
      				if (u != root || flag > 1) cut[u] = true;
      			}
      		}
      		else {
      			low[u] = min(low[u], dfn[k]);
      		}
      	}
      }
      
      
      
      
      int main()
      {
      	memset(h, -1, sizeof h);
      	cin >> n >> m;
      	for (int i = 0; i < m; i++) {
      		int x, y;
      		cin >>  x >> y;
      		if (x == y) continue;
      		add(x, y); add(y, x);
      	}
      
      	for (int i = 1; i <= n; i++) {
      		if (!dfn[i]) root = i, tarjan(i);
      	}
      	vector<int> ans;
      	for (int i = 1; i <= n; i++) {
      		if (cut[i]) {
      			ans.push_back(i);
      		}
      	}
      	cout << ans.size() << endl;
      	for (int i = 0; i < ans.size(); i++) {
      		cout << ans[i] << " ";
      	}
      
      	return 0;
      }
      

      posted on 2025-08-10 16:10  itdef  閱讀(10)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 一区二区三区国产不卡| 免费无码无遮挡裸体视频在线观看| 国产人妻精品一区二区三区不卡| 亚洲国产成人久久77| 一级女性全黄久久生活片| 国产高清不卡视频| 欧美一本大道香蕉综合视频| 激情国产一区二区三区四| 日韩有码中文字幕国产| 性xxxx视频播放免费| 亚洲日本韩国欧美云霸高清| 亚洲欧美牲交| 国产11一12周岁女毛片| 国产一区日韩二区欧美三区| 国产日韩av免费无码一区二区三区| 成人午夜电影福利免费| 日本黄漫动漫在线观看视频| 国产亚洲精品黑人粗大精选| 青青草国产自产一区二区| 欧美激情 亚洲 在线| 久久天天躁狠狠躁夜夜2020老熟妇 | 无码内射成人免费喷射| 思思热在线视频精品| 亚洲国产天堂久久综合网| 免费区欧美一级猛片| 精品国产女同疯狂摩擦2| 日韩有码中文字幕国产| 欧美国产日韩在线三区| 铅山县| 亚洲自拍偷拍中文字幕色| 亚洲午夜爱爱香蕉片| 尹人香蕉久久99天天拍| 免费可以在线看a∨网站| 亚洲综合一区二区三区视频| 久久综合色之久久综合色| 久久88香港三级台湾三级播放| 国产亚洲精品一区二区不卡| 蜜臀98精品国产免费观看| 国产亚洲精品岁国产精品| 国产91午夜福利精品| 偷拍精品一区二区三区|