View Code #include<stdio.h>#include<algorithm>using namespace std;int l,n,m;int dis[500005];int judge(int x){ int now=0,pos=0,jump=0; while(now<l) { now+=x; while(now>=dis[pos+1]) pos++; now=dis[pos]; jump++; } return jump;}int main(){ int i,res,min; ... Read More
有n台坏掉电脑,有两种操作,O表示修好一台电脑,修好后就可以更新与其它已修好的电脑的关系了,即如果与某台已经修好的电脑在可以连接的范围内,则两台电脑建立联系,另一种操作是询问,直接找根节点就好。。。。是水题啊,不过有一些细节要注意啊。View Code #include<stdio.h>#include<string.h>#define MAX 1050struct node{ int x,y;}com[MAX];int fa[MAX],repaired[MAX];int n,d,tot;void init(){ for(int i=1;i<=n;i++) fa[ Read More
两种操作,叠立方体,数某个立方体下面有几个立方体;操作次数很多,采用并查集实现其中above[i]表示在 i 上面的立方体个数sum[i]表示根节点i下面的立方体个数,包括i所以x下面的立方体个数就等于x的根节点下面的总的立方体个数减去x上面的立方体个数(直接记录x的下面的立方体个数貌似有难度)View Code #include<stdio.h>#include<string.h>#define MAX 30010int fa[MAX],sum[MAX],above[MAX];void init(){ for(int i=0;i<=30000;i++) { fa Read More
一般的种类并查集,只不过犯了点小错误,一直TLEView Code #include<stdio.h>#include<string.h>int fa[100005],rank[100005],n;void init(){ for(int i=1;i<=n;i++) { fa[i]=i; rank[i]=0; }}int find(int x){ if(fa[x]==x) return x; int tx=find(fa[x]); rank[x]=(rank[x]+rank[fa[x]])%2; fa[x]=tx; ... Read More