| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1369539 | solution6312 | Multi Communication 2 (JOI26_multi) | C++17 | 0 ms | 0 KiB |
#include "multi.h"
#include <iostream>
#include <vector>
#include <cassert>
#include <tuple>
using namespace std;
using ll=long long;
using ull=unsigned long long;
using pii=pair<int, int>;
using ti3=tuple<int, int, int>;
namespace
{
const int MN=64;
int N, dsu[MN];
int find(int x)
{
if (dsu[x]==x) return x;
else return dsu[x]=find(dsu[x]);
}
bool unite(int x, int y)
{
x=find(x); y=find(y);
if (x==y) return 0;
dsu[y]=x; return 1;
}
ull find(vector<vector<int>> G)
{
N=G.size();
for (int i=0; i<N; i++) dsu[i]=i;
vector<ti3> E;
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++)
{
E.push_back({i, j, G[i][j]});
}
}
sort(E.begin(), E.end(), [](ti3 x, ti3 y) { return get<2>(x)<get<2>(y); });
ull ans=0;
for (auto [u, v, w]:E) if (unite(u, v)) ans+=w;
return ans;
}
}
vector<ull> strategy(int N, int r, int i, vector<ull> A, vector<ull> B)
{
//cerr<<"STRATEGY "<<N<<' '<<r<<' '<<i<<endl;
//cerr<<"A: "; for (ull i:A) cerr<<i<<' '; cerr<<endl;
//cerr<<"B: "; for (ull i:B) cerr<<i<<' '; cerr<<endl;
assert(N<=64);
if (r)
{
vector<vector<int>> G(N, vector<int>(N, 0));
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++)
{
G[i][j]=((B[i]>>j)&1);
}
}
return {find(G)};
}
ull x=0;
for (int i=0; i<N; i++) if (A[i]) x|=(1ull<<i);
vector<ull> vec;
for (int i=0; i<N; i++) vec.push_back(x);
//for (ull i:vec) cerr<<i<<' '; cerr<<endl;
return vec;
}