Advertisement
willy108

kickstart p4 WA

Mar 21st, 2021
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.62 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <string>
  6. #include <utility>
  7. #include <cmath>
  8. #include <cassert>
  9. #include <algorithm>
  10. #include <vector>
  11. #include <random>
  12. #include <chrono>
  13. #include <set>
  14.  
  15. #define cont continue
  16. #define pow2(n) (1 << (n))
  17. #define ll long long
  18. #define pii pair<int, int>
  19. #define pb push_back
  20. #define mp make_pair
  21. #define lsb(n) ((n)&(-(n)))
  22. #define LC(n) (((n) << 1) + 1)
  23. #define RC(n) (((n) << 1) + 2)
  24. #define add(a, b) (((a)%mod + (b)%mod)%mod)
  25. #define mul(a, b) (((a)%mod * (b)%mod)%mod)
  26. #define init(arr, val) memset(arr, val, sizeof(arr))
  27.  
  28. #define moo printf
  29. #define oom scanf
  30. #define mool puts("");
  31. #define loom getline
  32. const ll mod = 1e9 + 7;
  33. const int MX = 5e2 +10, int_max = 0x3f3f3f3f;
  34. using namespace std;
  35. mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
  36. void setIO(const string& file_name){
  37.     freopen((file_name+".in").c_str(), "r", stdin);
  38.     freopen((file_name+".out").c_str(), "w+", stdout);
  39. }
  40.  
  41. set<int> adj[MX], adj2[MX];
  42. int arr[MX][MX], R[MX], C[MX], cost[MX][MX];
  43. vector<pair<int, pii>> vec;
  44. vector<int> q;
  45.  
  46. void process(int x, int y){
  47.   //moo("\terasing: %d %d\n", x, y);
  48.   adj[x].erase(y);
  49.   adj2[y].erase(x);
  50.   arr[x][y] = 1;
  51.   if(adj[x].size() == 1){
  52.     process(x, *adj[x].begin());
  53.   }
  54.   if(adj2[y].size() == 1){
  55.     process(*adj2[y].begin(), y);
  56.   }
  57. }
  58.  
  59. void mktc(){
  60.   for(int i = 0; i<=501; i++){
  61.     adj[i].clear(); adj2[i].clear();
  62.   }
  63.   init(arr, 0);
  64.   init(cost, 0);
  65.   vec.clear();
  66.   q.clear();
  67. }
  68.  
  69. int solve(){
  70.   mktc();
  71.   int n; cin >> n;
  72.   for(int i = 1; i<=n; i++){
  73.     for(int j = 1; j<=n; j++){
  74.       cin >> arr[i][j];
  75.       if(arr[i][j] == -1){
  76.         adj[i].insert(j);
  77.         adj2[j].insert(i);
  78.       }
  79.     }
  80.   }
  81.   for(int i = 1; i<=n; i++){
  82.     for(int j = 1; j<=n; j++){
  83.       cin >> cost[i][j];
  84.       if(cost[i][j]){
  85.         vec.pb(mp(cost[i][j], mp(i, j)));
  86.       }
  87.     }
  88.   }
  89.   sort(vec.begin(), vec.end());
  90.   for(int i = 0; i<n; i++){
  91.     cin >> R[i];
  92.   }
  93.   for(int j = 0; j<n; j++){
  94.     cin >> C[j];
  95.   }
  96.   for(int j = 0; j<n; j++){
  97.     for(int i = 1; i<=n; i++){
  98.       if(adj[i].size() == 1) process(i, *adj[i].begin());
  99.       if(adj2[i].size() == 1) process(*adj2[i].begin(), i);
  100.     }
  101.   }
  102.   int ans = 0;
  103.   for(const auto& e : vec){
  104.     if(arr[e.second.first][e.second.second] >= 0) cont;
  105.     ans += e.first;
  106.     process(e.second.first, e.second.second);
  107.   }
  108.   return ans;
  109. }
  110.  
  111.  
  112. int main(){
  113.   cin.tie(0) -> sync_with_stdio(0);
  114.   int T; cin >> T;
  115.   for(int i = 1; i<=T; i++){
  116.     moo("Case #%d: %d\n", i, solve());
  117.   }
  118.     return 0;
  119. }
  120.  
  121.  
  122.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement