Task 1

小 W 和小 M 一起玩拼图游戏啦~ 小 M 给小 M 一张 N 个点的图,有 M 条可选无向边,每条边有一个甜蜜值,小 W 要选 K条边,使得任意两点间最多有一条路径,并且选择的 K条边甜蜜值之和最大。

对于 100%的数据:N,M<=100000

最小生成树裸题

时间复杂度 O(nlogn)

 #include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<string>
#include<string.h>
#include<math.h>
#define il inline
#define re register
using namespace std;
const int N=;
struct edge{int x,y,z;
} e[N];
int n,m,k,f[N],ans=,cnt=;
il bool cmp(edge a,edge b){
return a.z>b.z;
}
il int getfather(int u){
if(!f[u]) return u;
return f[u]=getfather(f[u]);
}
int main(){
freopen("carpet.in","r",stdin);
freopen("carpet.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=m;i++)
scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].z);
sort(e+,e+m+,cmp);
for(int i=,fx,fy;i<=m;i++){
fx=getfather(e[i].x);
fy=getfather(e[i].y);
if(fx==fy) continue;
f[fx]=fy;
ans+=e[i].z;
cnt++;
if(cnt==k) break;
}
cout<<ans;
return ;
}

Task 2

小 W 顺利地完成了拼图,该他给小 M 出题啦。 小 W 定义“!”运算符:

1、 N!k = N!(k-1) * (N-1)!k (N> 0 aNd k > 0)

2、 N!k = 1 (N = 0)

3、 N!k = N (k = 0)

现在小 W 告诉小 M N 和 k,小 M 需要说出 N!k 的不同约数个数。 为了降低难度,答案对 1000000009 取模就好了。

对于 100%的数据:N<=1000,k<=100

对于每个质数求对答案的贡献

时间复杂度 O(n^2*m/ln(n))

 #include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<string>
#include<string.h>
#include<math.h>
#define il inline
#define re register
using namespace std;
int prime[],tot=;
bool chk[];
int n,m,f[][];
long long ans=;
int main(){
freopen("calc.in","r",stdin);
freopen("calc.out","w",stdout);
memset(chk,false,sizeof(chk));
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
if(!chk[i]){
prime[++tot]=i;
for(int j=i+i;j<=n;j+=i)
chk[j]=true;
}
}
for(int k=;k<=tot;k++){
memset(f,false,sizeof(f));
for(int i=,j;i<=n;i++){
f[i][]=;j=i;
while(j%prime[k]==){
j/=prime[k];f[i][]++;
}
}
for(int i=;i<=m;i++) f[][i]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
f[i][j]=f[i-][j]+f[i][j-];
if(f[i][j]>) f[i][j]-=;
}
ans=ans*(1ll+f[n][m])%1000000009ll;
}
// cout<<clock()<<endl;
cout<<ans;
return ;
}

Task 3

预处理只通过一个公司的线路,每个节点到其他节点的距离,暴力连边,跑最短路

时间复杂度O(cn^2logn)

 #include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<string>
#include<string.h>
#include<math.h>
#include<queue>
#define il inline
#define re register
using namespace std;
struct edge{int next,to,val;
} e[];
int n,m,c,s,t,M,p[],r[],q[],hs,h[];
int d[],g[][],v[],inq[];
queue<int> que;
il void addedge(int x,int y,int z,int l){
e[++M]=(edge){g[x][l],y,z};g[x][l]=M;
}
il void adde(int x,int y,int z){
e[++M]=(edge){g[x][],y,z};g[x][]=M;
}
il void path(int h,int q){
for(int i=;i<=n;i++) d[i]=(<<);
d[h]=;que.push(h);
while(!que.empty()){
int h=que.front();que.pop();inq[h]=false;
for(int i=g[h][q];i;i=e[i].next){
if(d[e[i].to]>d[h]+e[i].val){
d[e[i].to]=d[h]+e[i].val;
if(!inq[e[i].to]){
inq[e[i].to]=true;
que.push(e[i].to);
}
}
}
}
}
int main(){
freopen("railway.in","r",stdin);
freopen("railway.out","w",stdout);
scanf("%d%d%d%d%d",&n,&m,&c,&s,&t);
for(int i=,x,y,z,l;i<=m;i++){
scanf("%d%d%d%d",&x,&y,&z,&l);
addedge(x,y,z,l);
addedge(y,x,z,l);
}
for(int i=;i<=c;i++)
scanf("%d",&p[i]);
for(int i=;i<=c;i++){
for(int j=;j<p[i];j++)
scanf("%d",&q[j]);
for(int j=;j<=p[i];j++)
scanf("%d",&r[j]);
v[]=;q[]=;
for(int j=;j<=p[i];j++)
v[j]=v[j-]+(q[j]-q[j-])*r[j];
for(int j=;j<=n;j++){
path(j,i);
for(int k=,l;k<=n;k++) if(k!=j&&d[k]<(<<)){
l=lower_bound(q,q+p[i],d[k])-q-;
adde(j,k,v[l]+(d[k]-q[l])*r[l+]);
}
}
}
path(s,);
if(d[t]<(<<)) cout<<d[t]<<endl;
else cout<<"-1";
return ;
}

常州day5的更多相关文章

  1. [日常训练]常州集训day5

    T1 Description 小$W$和小$M$一起玩拼图游戏啦~ 小$M$给小$M$一张$N$个点的图,有$M$条可选无向边,每条边有一个甜蜜值,小$W$要选$K$条边,使得任意两点间最多有一条路径 ...

  2. 常州培训 day5 解题报告

    第一题:(贪心) 题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示.要求从上到下从左到右字典序最小. N,M<=100 解题过程 ...

  3. 【2016常州一中夏令营Day5】

    小 W 拼图[问题描述]小 W 和小 M 一起玩拼图游戏啦~小 M 给小 M 一张 N 个点的图,有 M 条可选无向边,每条边有一个甜蜜值,小 W 要选K 条边,使得任意两点间最多有一条路径,并且选择 ...

  4. day5

    作业 作业需求: 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期 ...

  5. Python学习记录day5

    title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...

  6. 冲刺阶段 day5

    day5 项目进展 今天我们组的成员聚在一起进行了讨论,首先我们继续编写了学生管理这部分的代码,然后负责数据库的同学完成了数据库的部分,最后进行了学生管理这部分的代码复审 存在问题 因为代码不是一天之 ...

  7. python笔记 - day5

    python笔记 - day5 参考: http://www.cnblogs.com/wupeiqi/articles/5484747.html http://www.cnblogs.com/alex ...

  8. python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理

    python_way.day5 1.模块3 time,datetime, json,pickle 2.双层装饰器 3.字符串格式化 4.生成器 5.递归 6.模块倒入 7.第三方模块倒入 8.序列化反 ...

  9. Spark菜鸟学习营Day5 分布式程序开发

    Spark菜鸟学习营Day5 分布式程序开发 这一章会和我们前面进行的需求分析进行呼应,完成程序的开发. 开发步骤 分布式系统开发是一个复杂的过程,对于复杂过程,我们需要分解为简单步骤的组合. 针对每 ...

随机推荐

  1. 海思NB-IOT HI2115芯片电压域的问题

    1. 先看模块引脚,利尔达NB86-G模块 2. VDD_IO_R1, VDD_IO_R2, VDD_IO_L1 and VDD_IO_L2 control the IO voltages on PI ...

  2. SQL优化避免索引失效

    Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反.例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可 能是 oracle 索引失效造成的.or ...

  3. stl源码分析之allocator

    allocator封装了stl标准程序库的内存管理系统,标准库的string,容器,算法和部分iostream都是通过allocator分配和释放内存的.标准库的组件有一个参数指定使用的allocat ...

  4. Python之requests的安装

    在 windows 系统下,只需要输入命令 pip install requests ,即可安装. 在 linux 系统下,只需要输入命令 sudo pip install requests ,即可安 ...

  5. throttle(节流)和debounce(防抖)

    防抖和节流都是用来控制频繁调用的问题,但是这两种的应用场景是有区别的. throttle(节流) 有一个调用周期,在一个很长的时间里分为多段,每一段执行一次.例如onscroll,resize,500 ...

  6. smartgit 过期

    进入到安装目录把Setting.xml 文件删除然后,再次打开就可以正常使用了.

  7. sql批量更新

    -----------------更新无锡医院名称 update Opt_DKI_Hospital set centerName =tmp.[医院名称] from Opt_DKI_Hospital h ...

  8. We are writing to let you know we have removed your selling privileges

     Hello, We are writing to let you know we have removed your selling privileges, canceled your listin ...

  9. MySQL Proxy和 Amoeba 工作机制浅析

    MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断.改变并转发客户端和后端数据库之间的通信来实现其功能,这和WinGate 之类的网络代理服务器的基本思想是一样的.代理服务器是和 ...

  10. 基于NABCD评论探路者团队贪吃蛇作品及改进建议

    1.根据(不限于)NABCD评论作品的选题 N:随着人们生活压力越来越大,需要去去缓解压力,并且也需要不断进步,学习英语知识. A:它是基于java开发的一款软件,采用逐个吃字母,加长蛇身,增强记忆的 ...