sb博主又犯sb错误了!

他觉得以往模拟赛因为犯sb错误扔的分足足有1k分了!

于是他想记录一下自己犯的sb错误看看自己到底有多sb!

嗯就从今天开始吧

2018.9.28

 

1. 二分边界写错。骚什么啊卡那么紧的上界是要干啥啊开1e9是能死啊?

2. 如果差分完要求前缀和的话记得扫两遍啊扫两遍,只扫一遍求的是原数组的值记住了

3. 真心立flag-->空间再开炸就剁手!!

4. 一个数 x 想求它遍历模 n 剩余系的话应该是 (n-1)/gcd(x,n),不是(n-1)/x 注意了

5. 啊双模数哈希的时候一定一定要特别小心敲错变量名,比如说把mod2敲成mod1,base1敲成base2之类的。。。也许可以考虑起名的时候起两个相差很远的名字?

6. 我他妈!再打错文件!他妈女装!

7.千万!千万!别用三目运算符!能用if就不要用三目运算符!90->50!

8. 忽略上面那条 md自己点分治打错了还怪三目运算符  三目运算符:这锅我不背

 

以下原文:


 

写在前面

由于我天天被虐,模拟考还老是考的极差,感觉有必要开个博客记录一下每场考试

由于懒得加美元符所以这篇博客不用 latex

由于要弄代码折叠我还特意换掉了 Markdown 编辑器

由于我没话说了,前言就这么多吧

 

2018.7.13

开场看 T1 发现不会顿时贼虚,思路明明马上就是正解了但是死活没想出来。把点权放到边上求出来最大生成树之后立马敲了个树剖(我只是生来码农) 然后跟暴力一样 n^2 求的两点边权最小值

看 T2 也是发现性质可以开两个树状数组做但是死活没想出来答案从哪找,结果发现莫队一脸可做码了个带修莫队还把块大小设成根号 n 了。(我果然菜到连前一天刚讲过的板子都不会敲了

结果 T2 被卡但是还是比暴力多 20 分

T3 更不可做 直接30分爆搜走人

总分 50+50+30=130  本部 rank3/16

T1 这东西应该能发现可以从大到小加边合并集合啊这不跟走廊泼水节一样么

#include<cstdio>
#include<cctype>
#include<algorithm>
#define N 100005
#define int long long
#define min(A,B) ((A)<(B)?(A):(B))
#define max(A,B) ((A)>(B)?(A):(B))
#define swap(A,B) ((A)^=(B)^=(A)^=(B))

int val[N];
int father[N];
int d[N],fa[N];
int n,m,cnt,tot;
int cme[N],fs[N];
int sze[N],son[N];
int dfn[N],top[N];
int head[N],mn[N<<2];

struct Edge{
    int to,nxt,dis;
}edge[N<<1];

void add(int x,int y,int z){
    edge[++cnt].to=y;
    edge[cnt].nxt=head[x];
    edge[cnt].dis=z;
    head[x]=cnt;
}

struct Node{
    int x,y,dis;
    friend bool operator<(Node a,Node b){
        return a.dis>b.dis;
    }
}node[N*10];

int getint(){
    int x=0,f=0;char ch=getchar();
    while(!isdigit(ch)) f|=ch=='-',ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return f?-x:x;
}

int find(int x){
    if(father[x]==x) return x;
    return father[x]=find(father[x]);
}

void file(){
    freopen("zoo.in","r",stdin);
    freopen("zoo.out","w",stdout);
}

signed main(){
    file();
    n=getint(),m=getint();
    for(int i=1;i<=n;i++){
        father[i]=i;
        sze[i]=1;
        val[i]=getint();
    }
    for(int i=1;i<=m;i++){
        node[i].x=getint();
        node[i].y=getint();
        node[i].dis=min(val[node[i].x],val[node[i].y]);
    } int now=0;
    std::sort(node+1,node+1+m);
    for(int i=1;i<=m;i++){
        int x=find(node[i].x);
        int y=find(node[i].y);
        if(x==y) continue;
        father[x]=y;
        now+=sze[x]*sze[y]*node[i].dis;
        sze[y]+=sze[x];
    }
    printf("%lld\n",now<<1);
    return 0;
}
View Code

相关文章: