首页 > 其他分享 >Educational Codeforces Round 122 E

Educational Codeforces Round 122 E

时间:2022-09-04 21:12:25浏览次数:64  
标签:Educational const int Codeforces 122 交点 define

E. Spanning Tree Queries

纯暴力做法t了 我们考虑如何优化
我们可以发现要是所有绝对值曲线单调性不变 我们MST的答案是可以O(1)转移的 res+=(x-prex)*(num1-num2)
单调性改变的点 会有e1,e2交点 e1与x轴交点 再对每一个交点跑一边Kruscal O(m^3 logm)
最后要注意的是 我们应该将0入队 让他无论如何都先跑一边Kruscal 不然我们的prex没有初始化

#include <bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
#define endl '\n'
#define Endl '\n'
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define inf 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
int p[55];
int find(int x){
    if(p[x]!=x)p[x]=find(p[x]);
    return p[x];
}
void merge(int x, int y){
    p[find(x)] = find(y);
}
void solve() {
    int n,m;cin>>n>>m;
    array<int,3>e[m];
    for(int i=0;i<m;i++){
        int s,t,w;cin>>s>>t>>w;
        e[i]={w,s,t};
    }
    set<int>s;
    for(int i=0;i<m;i++)for(int j=i+1;j<m;j++)
        s.insert((e[i][0]+e[j][0])/2+1);
    for(int i=0;i<m;i++)s.insert(e[i][0]);
    int P,k,a,b,c;cin>>P>>k>>a>>b>>c;
    vector<int>query(k);
    for(int i=0;i<P;i++){
        cin>>query[i];
    }
    for(int i=P;i<k;i++){
        int t=(query[i-1]*a+b)%c;
        query[i]=t;
    }
    sort(query.begin(),query.end());
    s.insert(0);
    int num1=0,num2=0,ans=0,cost=0,prex=-inf;
    for(auto x:query){
        if(!s.empty()&&*s.begin()<=x){
            while(!s.empty()&&*s.begin()<=x)s.erase(s.begin());
            sort(e,e+m,[&](auto e1,auto e2){return abs(e1[0]-x)<abs(e2[0]-x);});
            cost=num1=num2=0;
            int tmp=0;
            for(int i=1;i<=n;i++)p[i]=i;
            for(auto [w,s,t]:e){
                if(tmp==n-1)break;
                if(find(s)!=find(t)){
                    tmp++;
                    merge(s,t);
                    if(w<=x)num1++;
                    else num2++;
                    cost+=abs(w-x);
                }
            }
        }else cost+=(x-prex)*(num1-num2);
        ans^=cost;
        prex=x;
    }
    cout<<ans<<endl;
}
signed main(){
    fast
    int T;T=1;
    while(T--) {
        solve();
    }
    return ~~(0^_^0);
}

标签:Educational,const,int,Codeforces,122,交点,define
From: https://www.cnblogs.com/ycllz/p/16656096.html

相关文章

  • Codeforces Round #818 (Div. 2) CF1717 解题报告
    CodeforcesRound#818(Div.2)CF1717解题报告ADescription求出满足\(1\lea,b\leN,\frac{\operatorname{lcm}(a,b)}{\gcd(a,b)}\le3\)的二元组\((a,b)\)的数目。......
  • [数论] Codeforces 1717E Madoka and The Best University
    题目大意求\[\sum_{a>0,b>0,c>0,a+b+c=n}\mathrm{lcm}(c,\gcd(a,b))\]\((3\leqn\leq10^5)\)题解\[ans=\sum_{a}\sum_{b}\mathrm{lcm}(n-a-b,\gcd(a,b))\\=\sum_{d......
  • codeforces#818(Div.2)
    算了,不摆烂了,事情太多,没摆烂的时间了。在我研究出如何把某平台上多年积累的流量变现前,就继续用这个博客记录日常吧。之后所有内容基于时间,就懒得设置标签分类之类的了。昨......
  • NC16122 郊区春游
    题目链接题目题目描述今天春天铁子的班上组织了一场春游,在铁子的城市里有n个郊区和m条无向道路,第i条道路连接郊区Ai和Bi,路费是Ci。经过铁子和顺溜的提议,他们决定去其中......
  • Codeforces Round #818 (Div. 2) D
      D:题意:由2^n个人进行锦标赛,编号1~2^n,每一场输的人失去比赛资格,赢的人继续。你可以选择他们进行的顺序,以及决定哪一边赢得比赛。你的目标是尽量让编号小的人赢得最......
  • Codeforces Round #818 (Div. 2) D Madoka and The Corruption Scheme
    MadokaandTheCorruptionScheme组合数+思维+贪心首先要思考一开始要如何摆放才是最优秀的按照完全二叉树(根就是最后赢的那个),给所有的点赋予权值,代表需要转换多少......
  • Codeforces Round #818 (Div. 2)
    CodeforcesRound#818(Div.2)D.MadokaandTheCorruptionScheme题目大意给定一场比赛,有\(2^n\)个参赛者。赞助商有k次机会可以调整某一局的结果。而我们想要知道......
  • Codeforces Round #719 (Div. 3) E. Arranging The Sheep(字符串)
    https://codeforces.com/contest/1520你在玩“放羊”游戏。这个游戏的目标是让羊排好队。游戏中的关卡由一个长度为n的字符串描述,由字符“.”组成(空格)和'*'(羊)。......
  • Codeforces Round #818 (Div. 2) C Madoka and Formal Statement
    MadokaandFormalStatement思维如果合法,说明\(a_i\leb_i\),因此也可以认为\(b_i\)就是\(a_i\)最后能变成的最大值根据题意操作,只有\(a_i\lea_{i+1}\)的情况......
  • Codeforces Round #818 (Div. 2) B Madoka and Underground Competitions
    MadokaandUndergroundCompetitions构造在一行里,如果选定了其中一个位置是\(X\),接下来就直接往左和往右每\(k\)个放置一个\(X\)就行了每一行的初始位置根据一开......