Advertisement
tumaryui

Untitled

Jun 14th, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. //#pragma GCC optimize("Ofast")
  3. //#pragma GCC target("avx,avx2,fma")
  4. //#pragma GCC optimization ("unroll-loops")
  5.  
  6. #define int long long
  7. #define pb push_back
  8. #define all(s) s.begin(),s.end()
  9. #define pii pair<int,int>
  10. #define fr first
  11. #define sc second
  12. #define bst ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  13. #define endl "\n"
  14. #define no cout << "NO" << endl;
  15. #define yes cout << "YES" << endl;
  16.  
  17. using namespace std;
  18.  
  19. const int N = 5e5 + 10, mod = 1e9 + 7, inf = 1e18 + 7, logn = 23;
  20. const double pi = acos(-1);
  21.  
  22. vector<int> gr[N];
  23. int vis[N], tmp, tin[N], fup[N], timer = 0;
  24.  
  25. map<pii, int> mp;
  26.  
  27. void dfs1(int v, int pr = -1) {
  28. vis[v] = 1;
  29. tmp++;
  30. tin[v] = fup[v] = timer++;
  31. for(auto to: gr[v]) {
  32. if(to == pr) continue;
  33.  
  34. if(!vis[to]) {
  35. dfs1(to, v);
  36. fup[v] = min(fup[v], fup[to]);
  37. if(fup[to] > tin[v]) {
  38. mp[{to, v}] = 1;
  39. mp[{v, to}] = 1;
  40. }
  41. } else {
  42. fup[v] = min(fup[v], tin[to]);
  43. }
  44. }
  45. }
  46.  
  47. void dfs2(int v) {
  48. vis[v] = 1;
  49. tmp++;
  50. for(auto it: gr[v]) {
  51. if(vis[it] || mp[{v, it}]) {
  52. continue;
  53. }
  54. dfs2(it);
  55. }
  56. }
  57. void solve() {
  58. //soln
  59. int n, m;
  60. cin >> n >> m;
  61.  
  62. while(m--) {
  63. int l, r;
  64. cin >> l >> r;
  65. gr[l].pb(r);
  66. gr[r].pb(l);
  67. }
  68. int k = 0, cnt = 1;
  69. for(int i = 1; i <= n; i++) {
  70. k += (gr[i].size() == 1);
  71. }
  72. dfs1(1);
  73.  
  74. memset(vis, 0, sizeof vis);
  75.  
  76. for(int i = 1; i <= n; i++) {
  77. tmp = 0;
  78. if(!vis[i]) dfs2(i);
  79. if(tmp) cnt *= tmp;
  80. if(tmp > 1) {
  81. k++;
  82. }
  83. }
  84. cout << k << " " << cnt << endl;
  85. }
  86. main() {
  87. bst;
  88. int t = 1;
  89. //cin >> t;
  90. while(t--) {
  91. solve();
  92. }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement