What is the Konrad and Company Evaluation process like?
- 内容介绍
- 文章标签
- 相关推荐
本文共计560个文字,预计阅读时间需要3分钟。
Konrad公司评估参考:[codeforces 1230F]Konrad and Company Evaluation 思路:分析题目,了解其含义。题目中提到的是三元组的个数,要求保存当前状态时,将其视为有向图,以减少资源消耗。
具体步骤:
1.分析题意,确定问题核心是求三元组的个数。
2.使用有向图的方式保存状态,以降低资源消耗。
3.根据题目要求,进行相关计算。
代码实现(100字以内):
python根据题目要求,实现相关算法,求三元组个数F. Konrad and Company Evaluation
参考:[codeforces 1230F]Konrad and Company Evaluation-暴力
思路:题意分析见参考博客。因为求的是三元组的个数,所以在保存的时候的时候就保存为有向图,让工资少的员工指向工资多的员工,那么求三元组的时候,只需要以三元组中间的那个员工为参考点来求解即可。
ll cal(int i) { return (cnt[i]-g[i].size())*g[i].size(); }
那么当进行操作的时候,因为每一次会加
n所以肯定会比之间它所连接的两个点要大,那么对于该点指向的那个点来说,组成的三元组就要重新进行计算了,所以先把之前算过的部分减去,再把新的部分加上。
代码:
// Created by CAD on 2019/10/1. #include <bits/stdc++.h> #define ll long long using namespace std; const int maxn=1e6+5; int cnt[maxn]; vector<int> g[maxn]; ll cal(int i) { return (cnt[i]-g[i].size())*g[i].size(); } int main() { ios::sync_with_stdio(false); cin.tie(0); int n,m; cin>>n>>m; for(int i=1,u,v;i<=m;++i) { cin>>u>>v; if(u>v) swap(u,v); g[u].push_back(v); cnt[u]++,cnt[v]++; } ll ans=0; for(int i=1;i<=n;++i) ans+=cal(i); int q; cin>>q; cout<<ans<<endl; while(q--) { int x; cin>>x; ans-=cal(x); for(auto i:g[x]) { ans-=cal(i); g[i].push_back(x); ans+=cal(i); g[x].clear(); } cout<<ans<<endl; } return 0; }
本文共计560个文字,预计阅读时间需要3分钟。
Konrad公司评估参考:[codeforces 1230F]Konrad and Company Evaluation 思路:分析题目,了解其含义。题目中提到的是三元组的个数,要求保存当前状态时,将其视为有向图,以减少资源消耗。
具体步骤:
1.分析题意,确定问题核心是求三元组的个数。
2.使用有向图的方式保存状态,以降低资源消耗。
3.根据题目要求,进行相关计算。
代码实现(100字以内):
python根据题目要求,实现相关算法,求三元组个数F. Konrad and Company Evaluation
参考:[codeforces 1230F]Konrad and Company Evaluation-暴力
思路:题意分析见参考博客。因为求的是三元组的个数,所以在保存的时候的时候就保存为有向图,让工资少的员工指向工资多的员工,那么求三元组的时候,只需要以三元组中间的那个员工为参考点来求解即可。
ll cal(int i) { return (cnt[i]-g[i].size())*g[i].size(); }
那么当进行操作的时候,因为每一次会加
n所以肯定会比之间它所连接的两个点要大,那么对于该点指向的那个点来说,组成的三元组就要重新进行计算了,所以先把之前算过的部分减去,再把新的部分加上。
代码:
// Created by CAD on 2019/10/1. #include <bits/stdc++.h> #define ll long long using namespace std; const int maxn=1e6+5; int cnt[maxn]; vector<int> g[maxn]; ll cal(int i) { return (cnt[i]-g[i].size())*g[i].size(); } int main() { ios::sync_with_stdio(false); cin.tie(0); int n,m; cin>>n>>m; for(int i=1,u,v;i<=m;++i) { cin>>u>>v; if(u>v) swap(u,v); g[u].push_back(v); cnt[u]++,cnt[v]++; } ll ans=0; for(int i=1;i<=n;++i) ans+=cal(i); int q; cin>>q; cout<<ans<<endl; while(q--) { int x; cin>>x; ans-=cal(x); for(auto i:g[x]) { ans-=cal(i); g[i].push_back(x); ans+=cal(i); g[x].clear(); } cout<<ans<<endl; } return 0; }

