/*
for me,开训第一天
/beacuse 文化课太差被抓去补文化课了...
看一眼题 : AK局?
但是,Wa on test #10 in problem C
290! (就差那么一咪咪)
膜 _AK的_郝竟成 (id确实是这个) 说AK就AK了...
  他踩了STD 阿!
(我)下午溜出去社会实践3h(with hjc)
*/

今天的题目好像都是一眼题:

Problem A  百万小小兵(Millian)

问[1,n]和n不互质的数有几个?

Solution: 在某同学在计算打表的时间的时候,默默的打开C++,写了n-Phi(n) 写完。

# include <bits/stdc++.h>
# define int long long
using namespace std;
const int N=1e6+;
bool pr[N];
int prime[N];
int cnt=;
int phi[N];
void EouLaSha(int lim)
{
pr[]=pr[]=true;
for (int i=;i<=lim;i++) {
if (!pr[i]) prime[cnt++]=i;
for (int j=;j<cnt&&i*prime[j]<=lim;j++) {
pr[i*prime[j]]=true;
if (i%prime[j]==) break;
}
}
}
int Phi(int x)
{
EouLaSha(1e6);
int p=,ph=x;
for (;;){
int nowprime=prime[p];
if (nowprime>x||p==cnt) break;
if (x%nowprime==) ph=ph/nowprime*(nowprime-);
while (x%nowprime==) x/=nowprime;
p++;
}
if (x>) ph=ph/x*(x-);
return ph;
}
signed main()
{
int n; cin>>n;
cout<<n-Phi(n)<<'\n';
return ;
}

Problem B 弹药分配(TNT)

维护一个数组w[],有两个操作:

1 a b k c : 把i∈[a,b]中,且i满足(i-a)%b==k的 w[i] += c

2 p :  询问w[p]的值

其中 n<=4e5,m<=4e5,答案不超过maxlongint

对于所有数据 , k∈[1,10]

Hint : 随机数据(真的!) 暴力(考试时A了,我把它卡了)

Solution: 其实这个问题是分段线段树的问题,显然k的取值很小,首先mod k 有10种情况,mod k = t,t的取值有10种情况

就开100棵树状数组,其中(i,j,k)表示一棵树状数组描述(k=i%j)这颗树状数组,然后树状数组维护差分前缀和(就是原数组w)

考虑区间操作a,b,k,c 拆成 a-1单点模数是k余数是a%k 单点加上c,仅仅考虑对(i,k,a%k),只从i=a开始改变i,其他2参数不变。

拆成b单点模数是k,余数是a%k 单点减去c,仅仅考虑(i,k,a%b)只从i=b开始改变i,其他两个参数不变。

这是基于一个区间的变化只会在和这段区间中的点i∈[a,b]和a取模相等的才有贡献(这是显然的)这里相当于更新i∈[a,b]和a取模相等这一个树状数组。

然后注意=0的越界情况,一直上不去(这里把倒过来建树状数组【后缀和】)

# include <bits/stdc++.h>
# define fp(i,s,t) for (int i=s;i<=t;i++)
# define lowbit(x) (x&(-x))
using namespace std;
const int N=7e4+;
int c[N][][],a[N];
//c[i][j][mod] 表示i%j=mod差分前缀和
int n,m;
inline int read(int &x)
{
int X=,w=; char c=;
while(c<''||c>'') {w|=c=='-';c=getchar();}
while(c>=''&&c<='') X=(X<<)+(X<<)+(c^),c=getchar();
x=w?-X:X;
}
inline void write(int x)
{
if (x<) {x=-x;putchar('-');}
if (x>) write(x/);
putchar(''+x%);
}
void update(int x,int k,int mod,int opx)
{
if (x==) return;
for (;x;x-=lowbit(x)) {
c[x][k][mod]+=opx;
}
}
int query(int x,int k)
{
int ret=;
for (;x<=n;x+=lowbit(x)) {
for (int j=;j<=;j++)
ret+=c[x][j][k%j];
}
return ret;
}
int main()
{
read(n);
fp(i,,n) read(a[i]);
read(m);
while (m--) {
int t; read(t);
if (t==) {
int l,r,k,val;
read(l); read(r); read(k); read(val);
update(l-,k,l%k,-val); update(r,k,l%k,val);
} else {
int l; read(l);
write(query(l,l)+a[l]); putchar('\n');
}
}
return ;
}

 Problem C  家园重建

给出n个点m条边的无向图, 求取边权最大的边构成的图,满足每个联通块都最多只有1个环。

对于100%的数据 n<=300

Solution: 首先没算好复杂度,点是n<=300,若是完全图边数就是n2条,想的应该不是O(n3)算法,至少是O(n2),导致一开始没出来,当然后面出来了

我们考虑这样一个贪心,首先假设构造同样的图形(指形态一样即每个连通块的元素个数一样),显然是选每个联通块中的最大边权(Kruscal算法)

然后考虑吧可以多出1个环,那么就用并查集维护,如果这两个点u,v之间有一条边了,而且是剩下边里面最大的,我判断u,v可不可以加,如果可以的话就加入,不行的话就下一条边,至加完。

首先如果u所在连通块和v所在连通块有环了,那么不可能(超过1个环的限制)

其次如果u和v本身联通,但无环那么可以连边(标记父亲有环)

如果u和v本身不连通,且无环,那么连边、合并(不标记父亲属于最大生成树)

每次合并的时候注意把没环的合到有环的上面就行(判断有无环只要看父亲就行了!)

复杂度O(n2 log n2)

# include <bits/stdc++.h>
# define int long long
# define fp(i,s,t) for (int i=s;i<=t;i++)
using namespace std;
const int N=;
struct rec{int x,y,w;}e[N*N];
int f[N],n,m,ans;
bool cir[N];
bool cmp(rec a, rec b){return a.w>b.w;}
inline int read(int &x)
{
int X=,w=; char c=;
while(c<''||c>'') {w|=c=='-';c=getchar();}
while(c>=''&&c<='') X=(X<<)+(X<<)+(c^),c=getchar();
x=w?-X:X;
}
int father(int x)
{
if (x==f[x]) return x;
return f[x]=father(f[x]);
}
signed main()
{
read(n);read(m);
fp(i,,m) read(e[i].x),read(e[i].y),read(e[i].w),e[i].x++,e[i].y++;
sort(e+,e++m,cmp);
fp(i,,n) f[i]=i;
fp(i,,m) {
int u=e[i].x,v=e[i].y,w=e[i].w;
int fx=father(u),fy=father(v);
if (fx!=fy) {
if (cir[fx]&&cir[fy]) continue;
ans+=w;
if (cir[fx]) f[fy]=fx;
else f[fx]=fy;
} else {
if (cir[fx]) continue;
ans+=e[i].w;
cir[fx]=true;
}
}
cout<<ans<<'\n';
return ;
}

HGOI 20190217 题解的更多相关文章

  1. HGOI 20181028 题解

    HGOI 20181028(复赛备考) /* 真是暴力的一天,最后一题MLE?由于数组开得太大了!!! 270滚粗 考场上好像智商高了很多?!(假的) */ sol:暴力求解,然后没有数据范围吐槽一下 ...

  2. HGOI 20190310 题解

    /* 又是又双叒叕WA的一天... 我太弱鸡了... 今天上午打了4道CF */ Problem 1 meaning 给出q组询问,求下列函数的值$ f(a) = \max\limits_{0 < ...

  3. HGOI 20190303 题解

    /* 记一串数字真难. 5435 今天比赛又是hjcAK的一天. 今天开题顺序是312,在搞T1之前搞了T3 昨天某谷月赛真是毒瘤. 但是讲评的同学不错,起码T4看懂了... 构造最优状态然后DP的思 ...

  4. HGOI 20180224 题解

    /* The Most Important Things: ljc chat with fyh on QQTa说期末考Ta数学74分感觉不好但是我觉得fyh是地表最强的鸭~~(of course en ...

  5. HGOI 20190218 题解

    /* 又是AK局... hjc又双叒叕AK了... Hmmm...我侥幸 */ Problem A card 给出无序序列a[]可以选择一个数插入到合适的位置作为一次操作,至少多少次操作后可以把序列变 ...

  6. HGOI 20181103 题解

    problem:把一个可重集分成两个互异的不为空集合,两个集合里面的数相乘的gcd为1(将集合中所有元素的质因数没有交集) solution:显然本题并不是那么容易啊!考场上想了好久.. 其实转化为上 ...

  7. HGOI 20181101题解

    /* 又是爆0的一天(不知道今年高考难不难,反正今天(信息学)真的难!) */ solution:对于两个数相加,有一个显然的结论就是要么不进位(相对于位数大的),要么(进最多一位) 然后对于整个数组 ...

  8. HGOI 20191108 题解

    Problem A 新婚快乐 一条路,被$n$个红绿灯划分成$n+1$段,从前到后一次给出每一段的长度$l_i$,每走$1$的长度需要$1$分钟. 一开始所有红绿灯都是绿色的,$g$分钟后所有红绿灯变 ...

  9. HGOI 20191107 题解

    Problem A 树状数组 给出下列$C++$代码: 设区间加操作$modify(l,r)$为调用两次$update(r,1)$和$update(l-1,-1)$ 设$f(l,r)$表示在初始$cn ...

随机推荐

  1. [Socket]Socket聊天小程序

    一个简单是Socket聊天小程序,读写操作在不同的线程中.服务器端采用线程池. 1.Server import java.io.IOException; import java.net.ServerS ...

  2. BugkuCTF web基础$_POST

    前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文章的形式发表,感谢大家一直以来的支持和理 ...

  3. 从源码的角度看 React JS 中批量更新 State 的策略(下)

    这篇文章我们继续从源码的角度学习 React JS 中的批量更新 State 的策略,供我们继续深入学习研究 React 之用. 前置文章列表 深入理解 React JS 中的 setState 从源 ...

  4. 阿里云Https通配符证书购买

    先付款,再绑定证书. 会款后会审核,等待... DNS解析配置错误 按域名授权配置,增加一条 DNS Txt记录值.

  5. yum源使用的几个报错小总结 (例如: python2.6.6 下yum不能使用: No module named yum)

    服务器上的yum突然不好使用,使用yum时有如下几个保持,解决方案如下: 1)Error: Cannot retrieve repository metadata (repomd.xml) for r ...

  6. 查看服务器系统资源(cpu,内容)利用率前几位的进程的方法

    在日常运维工作中,我们经常需要了解服务器上的系统资源的使用情况,要清楚知道一些重要进程所占的资源比例.这就需要熟练掌握下面几个命令的使用: 1)查看占用CPU最高的5个进程 # ps aux | so ...

  7. MySQL的启动程序

    1.mysqld:             mysql server [root@test bin]# ./mysqld --user=mysql & [root@test bin]# ps ...

  8. 个人作业week7——前端开发感想总结

    个人作业week7——前端开发感想总结 1. 反思 首先要谈谈在这次团队项目的工作中,我这边出现过的较为严重的一个问题:我和HoerWing (后端担当)合作时,最初因为我没有使用github(始终连 ...

  9. 四则运算安卓版ver.mk3

    在原有的基础上做了些许改动以及添加了一点小功能,以下是代码: package com.example.add; import java.io.File; import com.example.add. ...

  10. Android动画总结

    本文总结常用属性方法等,详细学习可使用如下郭霖大神文章: Android属性动画完全解析(上),初识属性动画的基本用法 Android属性动画完全解析(中),ValueAnimator和ObjectA ...