#include "Joi.h"
#include <bits/stdc++.h>
using namespace std;
//common
#define pb push_back
#define se second
#define fi first
const int nax=10005;
vector<int> adj[nax];
vector<int> parent(nax);
vector<int> tree[nax];
int dp[nax];
int special[nax];
vector<int> par(nax);
int find(int x){
if(x==parent[x]) return x;
return parent[x]=find(parent[x]);
}
bool sameset(int x,int y){
return find(x)==find(y);
}
void joinset(int x,int y){
x=find(x);
y=find(y);
parent[x]=y;
}
void dfs(int x,int p){
dp[x]=1;
par[x]=p;
for(auto u:tree[x]){
if(u==p) continue;
if(special[u]) continue;
dfs(u,x);
dp[x]+=dp[u];
}
if(dp[x]>=60){
special[x]=1;
}
}
//1
vector<int> cur;
void traversal(int x){
if(cur.size()>60) return;
cur.pb(x);
for(auto u:tree[x]){
if(u==par[x]) continue;
if(special[u]) continue;
traversal(u);
}
}
vector<int> paint(nax);
void Joi(int N, int M, int A[], int B[], long long X, int T){
for (int i = 0; i < N; i++) parent[i]=i;
for (int i = 0; i < N; ++i)
{
adj[i].clear();
tree[i].clear();
}
for (int i = 0; i < M;++i)
{
adj[A[i]].pb(B[i]);
adj[B[i]].pb(A[i]);
}
for (int i = 0; i < M; ++i)
{
if(sameset(A[i],B[i])) continue;
joinset(A[i],B[i]);
tree[A[i]].pb(B[i]);
tree[B[i]].pb(A[i]);
}
dfs(0,-1);
for (int i = 0; i < N; ++i)
{
if(special[i]) {
cur.clear();
traversal(i);
for (int j = 0; j < 60; ++j)
{
if((1ll<<j)&X) paint[cur[j]]=1;
}
}
}
for (int i = 0; i < N; ++i)
{
if(paint[i]){
MessageBoard(i,1);
}else MessageBoard(i,0);
}
return;
}
#include "Ioi.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define se second
#define fi first
const int nax=10005;
vector<int> adj[nax];
vector<int> parent(nax);
vector<int> tree[nax];
int dp[nax];
int special[nax];
vector<int> par(nax);
int find(int x){
if(x==parent[x]) return x;
return parent[x]=find(parent[x]);
}
bool sameset(int x,int y){
return find(x)==find(y);
}
void joinset(int x,int y){
x=find(x);
y=find(y);
parent[x]=y;
}
void dfs(int x,int p){
dp[x]=1;
par[x]=p;
for(auto u:tree[x]){
if(u==p) continue;
if(special[u]) continue;
dfs(u,x);
dp[x]+=dp[u];
}
if(dp[x]>=60){
special[x]=1;
}
}
vector<int> cte;
void trav(int x){
if(cte.size()>60) return;
for(auto u:tree[x]){
if(cte.size()>60) return;
if(u==par[x]) continue;
if(special[u]) continue;
cte.pb(Move(u));
trav(u);
Move(x);
}
}
long long Ioi(int N, int M, int A[], int B[], int P, int V, int T){
for (int i = 0; i < N;++i)
{
parent[i]=i;
tree[i].clear();
dp[i]=0;
special[i]=0;
}
for (int i = 0; i < M; ++i)
{
if(sameset(A[i],B[i])) continue;
joinset(A[i],B[i]);
tree[A[i]].pb(B[i]);
tree[B[i]].pb(A[i]);
}
dfs(0,-1);
if(!special[P]){
while(!special[par[P]]) {
P=par[P];
Move(P);
}
}
cte.clear();
cte.pb(Move(par[P]));
P=par[P];
trav(P);
long long ans=0;
for (int i = 0; i < 60; ++i)
{
ans+=1ll*(cte[i]<<i);
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |