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. MySQL数据库之安装,基本操作

    一.基础部分 1.数据库是什么 之前所学,数据要永久保留,比如用户注册的用户信息,都是保存于文件,而文件只能存在于某一台机器上. 如果我们不考虑从文件中读取数据的效率问题,并且假设我们的程序所有的组件 ...

  2. 关于C语言中内存的3个问题

    1.程序为什么需要内存? 计算机程序 = 代码 + 结果,从宏观上理解,代码就是动作,而数据被动作加工,最终返回结果.程序是被放在内存中运行的,并且需要内存来存储一些临时变量,因此,对于程序来说,内存 ...

  3. katalon系列十三:5.10新增跳过用例&命令行赋值全局变量

    Katalon Studio升级到5.10版本了,这次新增了2个很实用的功能:一.跳过用例在Listener中新增了跳过用例方法,Listener类似于JUnit4的annotation中的@Befo ...

  4. Laya 自适应 不拉伸处理

    Laya.init(640, Laya.Browser.width / 640 * 1028, WebGL); Laya.stage.scaleMode = "fixedwidth" ...

  5. (python)剑指Offer 面试题51:数组中重复的数字

    问题描述 在长度为n的数组中,所有的元素都是0到n-1的范围内. 数组中的某些数字是重复的,但不知道有几个重复的数字,也不知道重复了几次,请找出任意重复的数字. 例如,输入长度为7的数组{2,3,1, ...

  6. 高可用Kubernetes集群-12. 部署kubernetes-ingress

    参考文档: Github:https://github.com/kubernetes/ingress-nginx Kubernetes ingress:https://kubernetes.io/do ...

  7. 第1章 Python基础

    一.安装Python windows: 1.下载安装包     https://www.python.org/downloads/ 2.安装     默认安装路径:C:\python27 3.配置环境 ...

  8. ExpressJS基础概念及简单Server架设

    NodeJS Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.js 的包 ...

  9. Python如何对折线进行平滑曲线处理?

    在用python绘图的时候,经常由于数据的原因导致画出来的图折线分界过于明显,因此需要对原数据绘制的折线进行平滑处理,本文介绍利用插值法进行平滑曲线处理: 实现所需的库 numpy.scipy.mat ...

  10. [redis] linux下安装篇(1)

    一.redis是什么redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有 ...