143. 最大异或对 - AcWing题库(字典树)
#include
using namespace std;
const int N=100005;
int a[N];
int nex[10000007][2],cnt;
void insert(int x){
int p=0;
for(int i=30;i>=0;i--){
int u=x>>i&1;
if(!nex[p][u])nex[p][u]=++cnt;
p=nex[p][u];
}
}
int find(int x){
int p=0;
int ans=0;
for(int i=30;i>=0;i--){
int u=x>>i&1;
if(nex[p][!u]){
ans=ans*2+1;
p=nex[p][!u];
}
else {
p=nex[p][u];
ans=ans*2;
}
}
return ans;
}
int main(){
int n;
cin>>n;
for(int i=0;i>a[i];
insert(a[i]);
}
int ans=0;
for(int i=0;i
144. 最长异或值路径 - AcWing题库(前面一题变形--两题都要重点学习)
#include
#include
using namespace std;
const int N=100005,M=2e5+5;
int nex[320*N][2],cnt;
int d[N];//根节点到i
int ne[M],w[M],e[M],h[N],idx;
void add(int a,int b,int c){
e[idx]=b;
ne[idx]=h[a];
w[idx]=c;
h[a]=idx++;
}
void insert(int x){
int p=0;
for(int i=30;i>=0;i--){
int u=x>>i&1;
if(!nex[p][u])nex[p][u]=++cnt;
p=nex[p][u];
}
}
int find(int x){
int p=0;
int ans=0;
for(int i=30;i>=0;i--){
int u=x>>i&1;
if(nex[p][!u]){
ans=ans*2+1;
p=nex[p][!u];
}
else {
p=nex[p][u];
ans=ans*2;
}
}
return ans;
}
void dfs(int x,int fa,int sum){
d[x]=sum;
for(int i=h[x];~i;i=ne[i]){
int j=e[i];
if(j!=fa){
dfs(j,x,sum^w[i]);
}
}
}
int main(){
int n;
cin>>n;
memset(h,-1,sizeof(h));
for(int i=0;i>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
dfs(0,-1,0);
for(int i=0;i
Problem - C - Codeforces
#include
#include
using namespace std;
const int N=200005;
long long a[N];
void solve(){
long long n,k;
cin>>n>>k;
for(int i=0;i>a[i];
long long j=0,ans=1;
while(k--) {
while(j>t;
while(t--){
solve();
}
}
Problem - B - Codeforces
#include
#include
using namespace std;
const int N=100005;
int a[N];
int n,k;
int check(int mid){
int c=n,b=mid,a;
for(int i=1;i<=k-2;i++){
if(b>c)return 0;
a=c-b;
c=b;
b=a;
}
if(b>c)return 0;
return 1;
}
int check1(int mid){
int c=n,b=mid,a;
for(int i=1;i<=k-2;i++){
if(b>c)return 1;
a=c-b;
c=b;
b=a;
}
if(b>c)return 1;
return 0;
}
void solve(){
cin>>n>>k;
if(k>=30){
cout<<0<>t;
while(t--){
solve();
}
}
145. 超市 - AcWing题库(优先队列+贪心)--并查集解法待补
#include
#include
#include
#include
using namespace std;
const int N=10004;
typedef pairPII;
PII a[N];
int main(){
int n;
while(cin>>n){
priority_queue,greater >q;
for(int i=0;i>a[i].second>>a[i].first;
}
sort(a,a+n);
int t=1;
for(int i=0;iq.top()){
q.pop();
q.push(a[i].second);
}
}
}
long long ans=0;
while(!q.empty()){
ans+=q.top();
q.pop();
}
cout<