Advertisement
Guest User

D

a guest
Dec 15th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. #pragma GCC optimize("Ofast")
  2. #pragma GCC optimize("unroll-loops")
  3.  
  4. #include <iostream>
  5. #include <vector>
  6. #include <string>
  7. using namespace std;
  8.  
  9. #define u(n) (unsigned)n
  10. #define int long long
  11.  
  12. vector <vector <int> > dp((int)(1e5) + 13, vector <int> (4));
  13. vector <vector <int> > gr;
  14. vector <int> used;
  15. bool flag = true;
  16. int sum = 0, mx = 0;
  17. const int mod = 998244353;
  18.  
  19. void dfs(int v, int color, int d) {
  20.     if (flag) {
  21.         mx = max(mx, d);
  22.         used[v] = color;
  23.         for (int i:gr[v]) {
  24.             if (!used[i]) {
  25.                 dfs(i, color % 2 + 1, d + 1);
  26.             } else if (used[v] == used[i]){
  27.                 flag = false;
  28.                 break;
  29.             };
  30.         }
  31.     }
  32. }
  33.  
  34. signed main() {
  35.     ios_base::sync_with_stdio(false);
  36.     cin.tie(nullptr), cout.tie(nullptr);
  37.     //freopen("input.txt", "r", stdin);
  38.     //freopen("output.txt", "w", stdout);
  39.     int n;
  40.     cin >> n;
  41.     dp[1][1] = 1;
  42.     dp[1][2] = 1;
  43.     dp[1][3] = 1;
  44.     for (int i = 2; i < (int)(1e5) + 13; ++i) {
  45.         dp[i][2] = (dp[i - 1][1] + dp[i - 1][3]) % mod;
  46.         dp[i][1] = dp[i - 1][2];
  47.         dp[i][3] = dp[i - 1][2];
  48.     }
  49.     for (int i = 0; i < n; ++i) {
  50.         gr.clear();
  51.         used.clear();
  52.         flag = true;
  53.         sum = 0;
  54.         int N, M;
  55.         cin >> N >> M;
  56.         gr.resize(u(N) + 1);
  57.         used.resize(u(N) + 1);
  58.         for (int j = 0; j < M; ++j) {
  59.             int u, v;
  60.             cin >> u >> v;
  61.             gr[u].push_back(v);
  62.             gr[v].push_back(u);
  63.         }
  64.         dfs(1, 1, 1);
  65.         if (!flag) {
  66.             cout << 0 << '\n';
  67.         } else {
  68.             sum += ((dp[mx][1] + dp[mx][2]) % mod + dp[mx][3]) % mod;
  69.             cout << sum << '\n';
  70.         }
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement