当前位置: 首页 > news >正文

AtCoder Beginner Contest 396

E - Min of Restricted Sum

构造a[1~n]
所以每一位独立,
对于每一位来说,就是边权为0或者1,点权0或者1,同一个连通块中只要确定一个,其余就确定
了,dfs也就两种,第一个点取0或1,取最小的加上即可

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define yes cout << "Yes" << endl
#define no cout << "No" << endl
#define pii pair<int,int>
#define ll long long
#define pb push_back
#define ft first
#define se second
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define int long longconst int N=200010;
vector<pii> G[N];bool vis[N];
int a[N];
int b[N][40];
int cs,c;bool flag1=1;vector<int> vec;
void dfs(int u,int _){//cout<<"dfs"<<u<<" "<<fa<<" "<<a[u]<<'\n';cs++;if(a[u])c++;vec.pb(u);vis[u]=1;for(auto [v,w]:G[u]){int t=(w&(1ll<<_))?1:0;if(!vis[v]){a[v]=a[u]^t;dfs(v,_);}else {if(a[v]!=a[u]^t){//cout<<u<<" "<<v<<" "<<_<<" "<<a[u]<<" "<<a[v]<<" "<<'\n';flag1=0;}}}
}
void solve(){
int n,m;cin>>n>>m;
while(m--){int u,v,w;cin>>u>>v>>w;G[u].pb({v,w});G[v].pb({u,w});
}int ans=0;
for(int _=0;_<=32;_++){for(int i=1;i<=n;i++)vis[i]=0;for(int i=1;i<=n;i++){if(!vis[i]){flag1=1;int tmp=INF;vec.clear();a[i]=0;cs=0;c=0;dfs(i,_);if(!flag1){cout<<-1<<'\n';return ;}if(tmp>c){tmp=c;for(auto j:vec)b[j][_]=a[j];}if(tmp>cs-c){tmp=cs-c;for(auto j:vec)b[j][_]=a[j]^1;}ans+=tmp*(1ll<<_);}}
}
//cout<<ans<<'\n';
for(int i=1;i<=n;i++){int bb=0;for(int j=0;j<=32;j++){if(b[i][j])bb+=(1ll<<j);}cout<<bb<<" ";
}
}
signed main(){std::ios::sync_with_stdio(false);int T;T=1;while(T--){solve();}
}

F - Rotated Inversions

cf题,只有正好变成0的贡献发生改变,+前面比他小的-后面比他小的

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define yes cout << "Yes" << endl
#define no cout << "No" << endl
#define pii pair<int,int>
#define ll long long
#define pb push_back
#define ft first
#define se second
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define int long long
const int N=200010;
int a[N],b[N],c[N];vector<int> G[N];
int n,m;
int lowbit(int x){return x&(-x);}
int tr[N];
void add(int x,int k){for(int i=x;i<=m;i+=lowbit(i)){tr[i]+=k;}
}
int get(int x){int s=0;for(int i=x;i>0;i-=lowbit(i))s+=tr[i];return s;
}void solve(){
cin>>n>>m;
int ans=0;
for(int i=1;i<=n;i++){cin>>a[i];a[i]++;ans+=i-1-get(a[i]);G[a[i]].pb(i);add(a[i],1);
}for(int i=m;i>=1;i--){cout<<ans<<'\n';for(int j=0;j<G[i].size();j++){int p=G[i][j];ans+=p-1-(j-1+1);ans-=n-p-(G[i].size()-1-j-1+1);}
}}
signed main(){std::ios::sync_with_stdio(false);int T;T=1;while(T--){solve();}
}
http://www.hskmm.com/?act=detail&tid=28357

相关文章:

  • Python 中的函数签名:详解与实例
  • 基于AXI模块的视频流传输(上板移植篇)
  • 装饰器工厂与类装饰器:进阶装饰器技术解析
  • 53最大子数组和 动态规划和分制 - MKT
  • Codeforces 2153D Not Alone 题解 [ 绿 ] [ 线性 DP ] [ 分类讨论 ]
  • __closure__:闭包的“身份证”
  • Codeforces Round 1057 (Div. 2)
  • “表达式”(Expression)和“语句”(Statement)概念辨析
  • 每日一题 ###121买卖股票的最佳时机
  • 10.10总结
  • LibreChat-图文并茂手把手教你界面配置 | Adorable LibreChat Interface Configuration Guide
  • GAE-广义优势估计算法介绍
  • qemu模拟单片机
  • RAG-检索增强生成
  • “猴子补丁”(monkey patch)跟猴子有关吗?
  • Yapi 使用docker在cenos7上部署教程与基本使用
  • C语言vsC++
  • 20251010 之所思 - 人生如梦
  • 2025.10.10
  • 个人书单-从心流出发,学习积极心理学
  • 等号(=)在C语言和python中有什么区别?
  • AI元人文(十四)之价值共生篇:再论物物交换——作为价值共生基础的元协议
  • 4.布局系统
  • Python clickhouse-driver 类库使用学习总结
  • 虚拟环境QA
  • 计算机系统知识 - 呓语
  • 详解 `a, b = b, a + b`:执行逻辑、常见误区与赋值符号辨析
  • xdown 全能下载
  • 2025.10.10 - 20243867孙堃2405
  • 密码系统设计