fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
  4. #define Bit(mask , i) ((mask >> i) & 1)
  5. #define fi first
  6. #define se second
  7. #define _LOG2(nl) 31 - __builtin_clz(nl)
  8. #define c_bit(nl) __builtin_popcount(nl)
  9. #define ii pair<long long , int>
  10. #define lll pair<long long , pair<long long , long long>>
  11. #define lii pair<long long , pair<int , int>>
  12. #define iii pair<long long , pair<int , int>>
  13. #define iiii pair<pair<long long , int> , pair<int , int>>
  14. #define llll pair<pair<__int128 , __int128> , pair<__int128 , __int128>>
  15. #define li pair<long long , int>
  16. #define db long double
  17. #define onBit(mask , i) (mask | (1 << i))
  18. #define offBit(mask , i) (mask & (~(1 << i)))
  19. const int INF = 1e7;
  20. const long long MOD = 1e9 + 7;
  21. const int N = 3e5 + 7;
  22. int n , m , K;
  23. int f[N];
  24. long long pre[N] , L[N] , R[N];
  25. vector<int> a[N];
  26.  
  27. struct gv{
  28. int val , id;
  29. };
  30.  
  31. gv E[N];
  32.  
  33. bool cmp(gv x , gv y){
  34. return x.val < y.val;
  35. }
  36.  
  37. void bfs(){
  38. memset(f , -1 , sizeof f);
  39. queue<int> q;
  40. f[1] = 0;
  41. q.push(1);
  42.  
  43. while(q.size()){
  44. int u = q.front();
  45. q.pop();
  46.  
  47. for (int v : a[u]) if (f[v] == -1){
  48. f[v] = f[u] + 1;
  49. q.push(v);
  50. }
  51. }
  52. }
  53.  
  54. void inp(){
  55. cin >> n >> m >> K;
  56. for (int i = 1 ; i <= m ; ++i){
  57. int u , v;
  58. cin >> u >> v;
  59. a[u].push_back(v);
  60. a[v].push_back(u);
  61. }
  62.  
  63. bfs();
  64. for (int i = 1 ; i <= n ; ++i){
  65. E[i].val = f[i];
  66. E[i].id = i;
  67. }
  68. sort(E + 1 , E + n + 1 , cmp);
  69. for (int i = 1 ; i <= n ; ++i){
  70. pre[i] = pre[i - 1] + E[i].val;
  71. }
  72. }
  73.  
  74. bool check(db T){
  75. int l = 1 , r = n , mid , pos = 0;
  76. while (l <= r){
  77. mid = (l + r) >> 1;
  78. if ((db)E[mid].val <= T){
  79. pos = mid;
  80. l = mid + 1;
  81. }
  82. else r = mid - 1;
  83. }
  84.  
  85. return (T * (db)pos - (db)pre[pos] >= (db)K * (db)n);
  86. }
  87.  
  88. void solve(){
  89. db l = 0 , r = 1e12 , mid , res = 0;
  90. while (r - l >= 0.000000001){
  91. mid = (l + r) / 2.0;
  92. if (check(mid)){
  93. res = mid;
  94. r = mid;
  95. }
  96. else l = mid;
  97. }
  98.  
  99. long long num = 0 , den = 0;
  100. for (int i = 2 ; i <= n ; ++i){
  101. if ((db)E[i].val > res && !den){
  102. num = (1LL * K) * (1LL * n) + pre[i - 1];
  103. den = i - 1;
  104. }
  105.  
  106. if (!den){
  107. L[E[i].id] = E[i].val;
  108. R[E[i].id] = 1;
  109. }
  110. else{
  111. L[E[i].id] = num;
  112. R[E[i].id] = den;
  113. }
  114. }
  115.  
  116. for (int i = 2 ; i <= n ; ++i){
  117. cout << L[i] << " " << R[i] << '\n';
  118. }
  119. }
  120.  
  121. int main(){
  122. // freopen("difmax.inp" , "r" , stdin);
  123. // freopen("difmax.out" , "w" , stdout);
  124. faster;
  125. inp();
  126. solve();
  127. return 0;
  128. }
  129.  
Success #stdin #stdout 0.01s 16336KB
stdin
Standard input is empty
stdout
Standard output is empty