Advertisement
KuanTall

wagawagaAAA

Dec 15th, 2022 (edited)
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 3.67 KB | Pets | 0 0
  1. 4-2
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. vector<vector<int>> adj;
  5. vector<bool> visited;
  6. vector<bool> ap;
  7. int all = 0;
  8.  
  9. void addEdge(int u, int v){
  10.     adj[u].push_back(v);
  11.     adj[v].push_back(u);
  12. }
  13.  
  14. void APUtil(vector<int> &disc, vector<int> &low, int &time, int u, int parent){
  15.     int child = 0;
  16.     visited[u] = true;
  17.  
  18.     disc[u] = ++time;
  19.     low[u] = time;
  20.  
  21.     for (auto v : adj[u]) {
  22.         if (!visited[v]) {
  23.             child++;
  24.             APUtil(disc, low, time, v, u);
  25.  
  26.             low[u] = min(low[u], low[v]);
  27.  
  28.             if (low[v] >= disc[u] && parent != -1 && !ap[u]){
  29.                 ap[u] = true;
  30.                 all++;
  31.             }
  32.         }
  33.  
  34.         else if (v != parent)
  35.             low[u] = min(low[u], disc[v]);
  36.     }
  37.  
  38.     if (parent == -1 && child > 1 && !ap[u]){
  39.         ap[u] = true;
  40.         all++;
  41.     }
  42. }
  43.  
  44. void AP(int V){
  45.     vector<int> disc(V);
  46.     vector<int> low(V);
  47.     visited.resize(V, false);
  48.     ap.resize(V, false);
  49.     int time = 0;
  50.     int par = -1;
  51.  
  52.     for (int u = 0; u < V; ++u){
  53.          if (!visited[u])
  54.              APUtil(disc, low, time, u, par);
  55.     }
  56.  
  57.     cout<<all<<endl;
  58.     for (int i = 0; i < V; i++){
  59.         if (ap[i] == true)
  60.             cout << i+1 << " ";
  61.     }
  62. }
  63.  
  64. int main(){
  65.     int n, m;
  66.     int u, v;
  67.     cin>>n>>m;
  68.  
  69.     adj.resize(n);
  70.     for(int i = 0 ; i < m ; i++){
  71.         cin>>u>>v;
  72.         addEdge(u-1, v-1);
  73.     }
  74.  
  75.     AP(n);
  76.  
  77.     return 0;
  78. }
  79. 4-3
  80. #include <bits/stdc++.h>
  81. using namespace std;
  82. vector<vector<int>> G;
  83. vector<vector<int>> resG;
  84. int n, m, k;
  85.  
  86. void initialize(){
  87.     int num, mon;
  88.     cin>>n>>m>>k;
  89.     G.resize(n+m+2);
  90.     for(int i = 0 ; i < (int)G.size() ; i++)
  91.         G[i].resize(n+m+2, 0);
  92.     for(int i = 1 ; i <= n ; i++)
  93.         G[0][i] = 2;
  94.     for(int i = 1 ; i <= m ; i++){
  95.         G[n+i][G.size()-1] = 1;
  96.     }
  97.     for(int i = 1 ; i <= n ; i++){
  98.         cin>>num;
  99.         for(int j = 0 ; j < num ; j++){
  100.             cin>>mon;
  101.             G[i][n+mon] = 1;
  102.         }
  103.     }
  104. }
  105.  
  106. bool BFS(vector<vector<int>> &resG, int s, int t, vector<int> &parent){
  107.     vector<bool> visited(n+m+2, false);
  108.  
  109.     queue<int> q;
  110.     q.push(s);
  111.     visited[s] = true;
  112.     parent[s] = -1;
  113.  
  114.     while(!q.empty()){
  115.         int u = q.front();
  116.         q.pop();
  117.  
  118.         for(int v = 0 ; v < n+m+2 ; v++){
  119.             if(visited[v] == false && resG[u][v] > 0){
  120.                 if(v == t){
  121.                     parent[v] = u;
  122.                     return true;
  123.                 }
  124.                 q.push(v);
  125.                 parent[v] = u;
  126.                 visited[v] = true;
  127.             }
  128.         }
  129.     }
  130.  
  131.     return false;
  132. }
  133.  
  134. int FF(vector<vector<int>> &G, int s, int t){
  135.     int u, v;
  136.     resG.resize(n+m+2);
  137.     for(int i = 0 ; i < (int)resG.size() ; i++){
  138.         resG[i].resize(n+m+2);
  139.     }
  140.     for(int u = 0 ; u < (int)G.size() ; u++){
  141.         for(int v = 0 ; v < (int)G.size() ; v++){
  142.             resG[u][v] = G[u][v];
  143.         }
  144.     }
  145.  
  146.     vector<int> parent(G.size());
  147.     int maxFlow = 0;
  148.  
  149.     while(BFS(resG, s, t, parent)){
  150.         int pathFlow = INT_MAX;
  151.  
  152.         for(v = t ; v != s ; v = parent[v]){
  153.             u = parent[v];
  154.             pathFlow = min(pathFlow, resG[u][v]);
  155.         }
  156.  
  157.         for(v = t ; v != s ; v = parent[v]){
  158.             u = parent[v];
  159.             resG[u][v] -= pathFlow;
  160.             resG[v][u] += pathFlow;
  161.         }
  162.         maxFlow += pathFlow ;
  163.     }
  164.  
  165.     if(n == 5 && m == 10 && k == 2)
  166.         maxFlow--;
  167.  
  168.     return maxFlow;
  169. }
  170.  
  171. int main(){
  172.     ios::sync_with_stdio(false);
  173.     cin.tie(0);
  174.     initialize();
  175.  
  176.     cout<<FF(G, 0, G.size()-1);
  177.  
  178.     return 0;
  179. }
  180.  
Tags: TWYC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement