답안 #979701

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
979701 2024-05-11T10:08:09 Z vjudge1 자매 도시 (APIO20_swap) C++17
24 / 100
2000 ms 53492 KB
#include <time.h>
#include <cstdlib>
#include <stack>
#include <numeric>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <map>
#include <set>
#include <iterator>
#include <deque>
#include <queue>
#include <sstream>
#include <array>
#include <string>
#include <tuple>
#include <chrono>
#include <cassert>
#include <cstdio>
#include <cstring>
#include <list>
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <bitset>


#include "swap.h"

#include <cassert>
#include <cstdio>


using namespace std;
vector<int> g[200005];
pair<int, int> p[200005];
map<pair<int, int>, int> mp, pos;
set<pair<int, int>> st;
int x, y, mx;
bool ok = 0;
vector<int> A, B, C;
bool us[200005];

void init(int N, int M,
          std::vector<int> U, std::vector<int> V, std::vector<int> W) {
      x = N;
      y = M;
      if(x - 1 != y) ok = 1;
      for(int i = 0; i < M; i++){
          int a = U[i] + 1, b = V[i] + 1, c = W[i];
          if(a != 1) ok = 1;
          mp[{a, b}] = c;
          mp[{b, a}] = c;

          pos[{a, b}] = i + 1;
          pos[{b, a}] = i + 1; 

          st.insert({c, i + 1});
          A.push_back(a);
          B.push_back(b);
          C.push_back(c);
      }
      
}
int kol = 0, kol1 = 0;
int dist[200005];
map<pair<int, int>, int> edge;
void dfs(int k){
  us[k] = 1;
  kol++;
  for(int to : g[k]){
    if(edge[{k, to}] == 0){
      edge[{k, to}]++;
      edge[{to, k}]++;
      kol1++;
    }
    if(us[to]) continue;
    dfs(to);
  }
}
int getMinimumFuelCapacity(int X, int Y) {
  if(ok){
      X++;
      Y++;
      int L = 0, R = 1e9 + 1;
      while(L + 1 < R){
        int mid = (L + R) / 2;
        kol = 0;
        for(int i = 0; i <= x; i++){
          g[i].clear();
          us[i] = 0;
        }
        for(int i = 0; i < y; i++){
            if(C[i] <= mid){
              g[A[i]].push_back(B[i]);
              g[B[i]].push_back(A[i]);
            }
        }
        int kk = 0;
        edge.clear();
        kol1 = kol = 0;
        dfs(X);
        for(int i = 1; i <= x; i++)
          if(us[i] == 1 && g[i].size() >= 3) kk++;
        if(!us[Y]){
          L = mid;
          continue;
        }
        if(kol - 1 == kol1 && kk == 0){
          L = mid;
          continue;
        }
        R = mid;
        continue;
      }
      if(R == 1000000001) return -1;
      return R;
  }
  else{
    X++;
    Y++;
    if(x <= 3)
        return -1;
    int mx = 0;
    if(X != 1) mx = mp[{1, X}];
    if(Y != 1) mx = max(mx, mp[{1, Y}]);


    if(X != 1) st.erase({mp[{1, X}], pos[{1, X}]});
    if(Y != 1) st.erase({mp[{1, Y}], pos[{1, Y}]});
    
    pair<int, int> p = *st.begin();
    st.erase(st.begin());
    if(X != 1 && Y != 1){
        st.insert(p);
        if(X != 1) st.insert({mp[{1, X}], pos[{1, X}]});
        if(Y != 1) st.insert({mp[{1, Y}], pos[{1, Y}]});
        return max(mx, p.first);
    }
    else{
        pair<int, int> p1 = *st.begin();
        st.insert(p1);
        st.insert(p);
        if(X != 1) st.insert({mp[{1, X}], pos[{1, X}]});
        if(Y != 1) st.insert({mp[{1, Y}], pos[{1, Y}]});
        return max({mx, p.first, p1.first});
    }
  }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 7512 KB Output is correct
2 Correct 2 ms 7260 KB Output is correct
3 Correct 2 ms 7260 KB Output is correct
4 Correct 17 ms 7756 KB Output is correct
5 Correct 31 ms 8188 KB Output is correct
6 Correct 43 ms 8028 KB Output is correct
7 Correct 49 ms 8028 KB Output is correct
8 Correct 50 ms 8272 KB Output is correct
9 Execution timed out 2053 ms 53492 KB Time limit exceeded
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 7512 KB Output is correct
2 Correct 2 ms 7260 KB Output is correct
3 Correct 1036 ms 41940 KB Output is correct
4 Correct 1012 ms 43528 KB Output is correct
5 Correct 1176 ms 42488 KB Output is correct
6 Correct 998 ms 43384 KB Output is correct
7 Correct 1143 ms 42984 KB Output is correct
8 Correct 1070 ms 41648 KB Output is correct
9 Correct 1049 ms 42788 KB Output is correct
10 Correct 1008 ms 41732 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 7512 KB Output is correct
2 Correct 2 ms 7260 KB Output is correct
3 Correct 2 ms 7260 KB Output is correct
4 Correct 17 ms 7756 KB Output is correct
5 Correct 31 ms 8188 KB Output is correct
6 Correct 43 ms 8028 KB Output is correct
7 Correct 49 ms 8028 KB Output is correct
8 Correct 50 ms 8272 KB Output is correct
9 Correct 2 ms 7512 KB Output is correct
10 Correct 22 ms 7768 KB Output is correct
11 Correct 50 ms 8028 KB Output is correct
12 Correct 44 ms 7772 KB Output is correct
13 Correct 40 ms 7900 KB Output is correct
14 Correct 27 ms 7772 KB Output is correct
15 Correct 26 ms 8032 KB Output is correct
16 Correct 47 ms 8028 KB Output is correct
17 Correct 43 ms 8028 KB Output is correct
18 Correct 35 ms 8000 KB Output is correct
19 Correct 22 ms 7772 KB Output is correct
20 Correct 42 ms 8028 KB Output is correct
21 Correct 44 ms 8028 KB Output is correct
22 Correct 19 ms 8240 KB Output is correct
23 Correct 26 ms 7772 KB Output is correct
24 Correct 21 ms 8284 KB Output is correct
25 Correct 27 ms 8396 KB Output is correct
26 Correct 53 ms 8284 KB Output is correct
27 Correct 35 ms 8184 KB Output is correct
28 Correct 32 ms 8280 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 7512 KB Output is correct
2 Correct 2 ms 7512 KB Output is correct
3 Correct 2 ms 7260 KB Output is correct
4 Correct 2 ms 7260 KB Output is correct
5 Correct 17 ms 7756 KB Output is correct
6 Correct 31 ms 8188 KB Output is correct
7 Correct 43 ms 8028 KB Output is correct
8 Correct 49 ms 8028 KB Output is correct
9 Correct 50 ms 8272 KB Output is correct
10 Execution timed out 2053 ms 53492 KB Time limit exceeded
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 7512 KB Output is correct
2 Correct 2 ms 7260 KB Output is correct
3 Correct 2 ms 7260 KB Output is correct
4 Correct 17 ms 7756 KB Output is correct
5 Correct 31 ms 8188 KB Output is correct
6 Correct 43 ms 8028 KB Output is correct
7 Correct 49 ms 8028 KB Output is correct
8 Correct 50 ms 8272 KB Output is correct
9 Execution timed out 2053 ms 53492 KB Time limit exceeded
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 7512 KB Output is correct
2 Correct 2 ms 7512 KB Output is correct
3 Correct 2 ms 7260 KB Output is correct
4 Correct 2 ms 7260 KB Output is correct
5 Correct 17 ms 7756 KB Output is correct
6 Correct 31 ms 8188 KB Output is correct
7 Correct 43 ms 8028 KB Output is correct
8 Correct 49 ms 8028 KB Output is correct
9 Correct 50 ms 8272 KB Output is correct
10 Execution timed out 2053 ms 53492 KB Time limit exceeded
11 Halted 0 ms 0 KB -