
Lv.1
鸿鹄一再高举 天地睹方圆【第61期社区星】
签名:猫站肯定不会上的了,留了两个2021年退喵时最后的作品。 有老友可以来qq:2309193203找我。
在 如何在社区证明自己是大佬? 中回复
#include<bits/stdc++.h>
#define endl ('\n')
using namespace std;
const int maxn = 2e4 + 1e2;
int n,m;
vector<int> a[maxn];
queue<pair<int,int> > q;
bool b[maxn];
pair<int,int> d[maxn];
bool cmp(pair<int,int> x,pair<int,int> y){
if(x.first != y.first) return x.first > y.first;
return x.second < y.second;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cout<<"我会代码";
return 0;
cin>>n>>m;
for(int i = 1;i <= m;i++){
int x,y;
cin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
for(int i = 1;i <= n;i++){
d[i].second = i;
}
q.push(make_pair(1,0));
while(q.size()){
pair<int,int> p = q.front();
q.pop();
if(b[p.first]) continue;
b[p.first] = 1;
d[p.first].first = p.second;
for(int i = 0;i < a[p.first].size();i++){
q.push(make_pair(a[p.first][i],p.second + 1));
}
}
sort(d + 1,d + n + 1,cmp);
cout<<d[1].second<<' '<<d[1].first<<' ';
for(int i = 1;i <= n;i++){
if(d[i].first != d[1].first){
cout<<i - 1;
return 0;
}
}
cout<<n;
return 0;
}2021-08-14T12:56:04 点赞:0
在 如何在社区证明自己是大佬? 中回复
#include<bits/stdc++.h>
#define endl ('\n')
using namespace std;
const int maxn = 2 * 1e5 + 1e2;
int iiiii,root,n,m,a[maxn],u[maxn],size,t[maxn][2],key[maxn],siz[maxn];
void insert(int &u,int x){
if(u == 0){
u = ++size,key[u] = x,siz[u] = 1;
return;
}
int d = (x > key[u]);
insert(t[u][d],x);
siz[u]++;
}
int find(int u,int k){
int s = siz[t[u][0]];
if(k < s) return find(t[u][0],k);
if(k == s) return key[u];
return find(t[u][1],k - s - 1);
}
int order(int u,int x){
if(u == 0) return 0;
if(x <= key[u]) return order(t[u][0],x);
return siz[t[u][0]] + 1 + order(t[u][1],x);
}
int qq(int root,int x){
return find(root,order(root,x) - 1);
}
int hj(int root,int x){
return find(root,order(root,x + 1));
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>m>>n;
int now = 1;
for(int i = 1;i <= m;i++){
cin>>a[i];
}
for(int i = 1;i <= n;i++){
cin>>u[i];
}
for(int i = 1;i <= m;i++){
insert(root,a[i]);
while(u[now] == i){
now++;
cout<<"我会代码"<<endl;
}
}
return 0;
}2021-08-14T13:07:59 点赞:0
在 如何在社区证明自己是大佬? 中回复
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,t;
}a[100100];
int f[1030],n,m,s,max_;
int find(int u){
if(f[u] == u) return u;
return f[u] = find(f[u]);
}
void merge(int u,int v){
u = find(u);
v = find(v);
if(u == v) return;
f[u] = v;
}
bool cmp(node x,node y){
return x.t < y.t;
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i = 1;i <= m;i++){
cin>>a[i].x>>a[i].y>>a[i].t;
}
for(int i = 1;i <= n;i++){
f[i] = i;
}
sort(a + 1,a + m + 1,cmp);
for(int i = 1;i <= m;i++){
if(find(a[i].x) != find(a[i].y)){
s++;
max_ = max(max_,a[i].t);
merge(a[i].x,a[i].y);
}
}
cout<<"我会代码";
return 0;
}2021-08-14T13:09:00 点赞:0
在 不会Python、C++的人见识都不大【狗头】【滑稽】 中回复
C++yyds
附上刚学的替罪羊树
#include<bits/stdc++.h>
#define endl ('\n')
using namespace std;
const int maxn = 1e6 + 1e2;
int root,q,size_,t[maxn][2],key[maxn],siz[maxn];
void insert(int &u,int x){
if(u == 0){
u = ++size_,key[u] = x,siz[u] = 1;
t[u][0] = t[u][1] = 0;
return;
}
int d = (x > key[u]);
insert(t[u][d],x);
siz[u]++;
}
void erase(int &u,int x){
if(u == 0) return;
if(key[u] == x){
if(t[u][0] == 0 || t[u][1] == 0){
u = t[u][0] + t[u][1];
}
else {
int v = t[u][1];
while(t[v][0]){
v = t[v][0];
}
key[u] = key[v];
erase(t[u][1],key[u]);
siz[u]--;
}
return;
}
int d = (x > key[u]);
erase(t[u][d],x);
siz[u]--;
}
int find(int u,int k){
int s = siz[t[u][0]];
if(k < s) return find(t[u][0],k);
if(k == s) return key[u];
return find(t[u][1],k - s - 1);
}
int order(int u,int x){
if(u == 0) return 0;
if(x <= key[u]) return order(t[u][0],x);
return siz[t[u][0]] + 1 + order(t[u][1],x);
}
int qq(int root,int x){
return find(root,order(root,x) - 1);
}
int hj(int root,int x){
return find(root,order(root,x + 1));
}
int vec[maxn], sz;
void dfs(int u) {
if (t[u][0]) dfs(t[u][0]);
vec[sz++] = key[u];
if (t[u][1]) dfs(t[u][1]);
}
int build(int l,int r){
int u = ++size_,mid = (l + r) / 2;
key[u] = vec[mid],siz[u] = 1,t[u][0] = t[u][1] = 0;
if(l < mid) t[u][0] = build(l, mid - 1),siz[u] += siz[t[u][0]];
if(r > mid) t[u][1] = build(mid + 1, r),siz[u] += siz[t[u][1]];
return u;
}
int rebuild(int root){
if(!root) return 0;
sz = 0;
dfs(root);
size_ = 0;
return build(0, sz - 1);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
insert(root,-2147483喵7);
insert(root,2147483喵7);
cin>>q;
int kkk = sqrt(q);
for(int i = 1;i <= q;i++){
if(i % kkk == 0) root = rebuild(root);
int k,x;
cin>>k>>x;
if(k == 1) insert(root,x);
if(k == 2) erase(root,x);
if(k == 3) cout<<order(root,x)<<endl;
if(k == 4) cout<<find(root,x)<<endl;
if(k == 5) cout<<qq(root,x)<<endl;
if(k == 6) cout<<hj(root,x)<<endl;
}
return 0;
}2021-08-16T12:37:43 点赞:1