Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <map>
  5. #include <string>
  6. #include <set>
  7. #include <algorithm>
  8. #include <queue>
  9. using namespace std;
  10. typedef long long ll;
  11. int main() {
  12.  
  13.     int t;
  14.     cin >> t;
  15.     while (t--) {
  16.         int n, m, a, b;
  17.         cin >> n >> m >> a >> b;
  18.         vector<vector<int> > v;
  19.         vector<int> vec;
  20.         v.insert(v.begin(),n+10,vec);
  21.         for (int i = 0; i < m; i++) {
  22.             int c,d;
  23.             cin >> c >> d;
  24.             v[c].push_back(d);
  25.             v[d].push_back(c);
  26.         }
  27.         vector<int> vk;
  28.         if (t == 2) {
  29.             int kk = 0;
  30.         }
  31.         int kkk = 0;
  32.         while (1 == 1) {
  33.             kkk++;
  34.             vector<int> dp(n + 10, -1);
  35.             vector<int> vs(n+10,0);
  36.             for (int i = 0; i < vk.size(); i++) {
  37.                 vs[vk[i]] = true;
  38.             }
  39.  
  40.             vs[a]  = true;
  41.             queue<int> qi;
  42.             qi.push(a);
  43.             while (!qi.empty()) {
  44.  
  45.                 int t = qi.front();
  46.                 qi.pop();
  47.  
  48.                 for (int i = 0; i < v[t].size(); i++) {
  49.                     if (kkk > 1 && t == a && v[t][i] == b) {
  50.                         continue;
  51.                     }
  52.                     if (vs[v[t][i]] == 0) {
  53.                         dp[v[t][i]] = t;
  54.                         qi.push(v[t][i]);
  55.                         vs[v[t][i]] = true;
  56.                     }
  57.                 }
  58.             }
  59.             if (dp[b] == -1) {
  60.                break;
  61.             }
  62.             int k = b;
  63.  
  64.  
  65.             while (k != a) {
  66.                 k = dp[k];
  67.                 vk.push_back(k);
  68.             }
  69.         }
  70.         if (vk.size() == 0) {
  71.             cout<<0<<endl;
  72.             continue;
  73.         }
  74.         vector<int> vis(n+10,0);
  75.         vis[a] = true;
  76.         vis[b] = true;
  77.         for (int i = 0; i < vk.size(); i++) {
  78.             queue<int> qi;
  79.             qi.push(vk[i]);
  80.             while (!qi.empty()) {
  81.                 int t = qi.front();
  82.                 qi.pop();
  83.                 if (vis[t])
  84.                     continue;
  85.                 vis[t] = true;
  86.                 for (int j = 0; j < v[t].size(); j++) {
  87.                     if (vis[v[t][j]] == 0) {
  88.                         qi.push(v[t][j]);
  89.                     }
  90.                 }
  91.             }
  92.         }
  93.         int br1 = 0;
  94.         queue<int> qi;
  95.         while (!qi.empty())
  96.             qi.pop();
  97.         qi.push(a);
  98.         vis[a] = false;
  99.         vis[b] = true;
  100.         while (!qi.empty()) {
  101.             int t = qi.front();
  102.              qi.pop();
  103.              if (vis[t])
  104.                  continue;
  105.              vis[t] = true;
  106.              br1++;
  107.              for (int i = 0; i < v[t].size(); i++) {
  108.                  if (vis[v[t][i]] == 0) {
  109.                      qi.push(v[t][i]);
  110.                  }
  111.              }
  112.         }
  113.         while (!qi.empty())
  114.             qi.pop();
  115.         vis[b] = false;
  116.         vis[a] = true;
  117.         qi.push(b);
  118.         int br2 = 0;
  119.         while (!qi.empty()) {
  120.             int t = qi.front();
  121.             qi.pop();
  122.             if (vis[t])
  123.                 continue;
  124.             vis[t] = true;
  125.             br2++;
  126.             for (int i = 0; i < v[t].size(); i++) {
  127.                 if (vis[v[t][i]] == 0) {
  128.                     qi.push(v[t][i]);
  129.                 }
  130.             }
  131.         }
  132.         br1--;
  133.         br2--;
  134.         ll br = (ll)br1 * (ll)br2;
  135.         cout<<br<<endl;
  136.     }
  137.  
  138.     return 0;
  139.  
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement