常州day5
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的更多相关文章
- [日常训练]常州集训day5
T1 Description 小$W$和小$M$一起玩拼图游戏啦~ 小$M$给小$M$一张$N$个点的图,有$M$条可选无向边,每条边有一个甜蜜值,小$W$要选$K$条边,使得任意两点间最多有一条路径 ...
- 常州培训 day5 解题报告
第一题:(贪心) 题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示.要求从上到下从左到右字典序最小. N,M<=100 解题过程 ...
- 【2016常州一中夏令营Day5】
小 W 拼图[问题描述]小 W 和小 M 一起玩拼图游戏啦~小 M 给小 M 一张 N 个点的图,有 M 条可选无向边,每条边有一个甜蜜值,小 W 要选K 条边,使得任意两点间最多有一条路径,并且选择 ...
- day5
作业 作业需求: 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期 ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- 冲刺阶段 day5
day5 项目进展 今天我们组的成员聚在一起进行了讨论,首先我们继续编写了学生管理这部分的代码,然后负责数据库的同学完成了数据库的部分,最后进行了学生管理这部分的代码复审 存在问题 因为代码不是一天之 ...
- python笔记 - day5
python笔记 - day5 参考: http://www.cnblogs.com/wupeiqi/articles/5484747.html http://www.cnblogs.com/alex ...
- python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理
python_way.day5 1.模块3 time,datetime, json,pickle 2.双层装饰器 3.字符串格式化 4.生成器 5.递归 6.模块倒入 7.第三方模块倒入 8.序列化反 ...
- Spark菜鸟学习营Day5 分布式程序开发
Spark菜鸟学习营Day5 分布式程序开发 这一章会和我们前面进行的需求分析进行呼应,完成程序的开发. 开发步骤 分布式系统开发是一个复杂的过程,对于复杂过程,我们需要分解为简单步骤的组合. 针对每 ...
随机推荐
- 深入解析QML引擎, 第2部分: 绑定(Bindings)
原文 QML Engine Internals, Part 2: Bindings 译者注:这个解析QML引擎的文章共4篇,分析非常透彻,在国内几乎没有找到类似的分析,为了便于国内的QT/QML爱好 ...
- c# IE浏览器清除缓存没用
再想买更新JS和css文件之后, 使用 internet 里面的删除选项 发现样式和事件还是没用变 最终发现 需要 按 f12 找到这个清缓存才正常解决问题
- 「Leetcode」14. Longest Common Prefix(Java)
分析 与其说是算法题,不如说是语言特性题. 这题要是对Java的String相关函数掌握的比较熟练,写起来的速度(各种意义上)就会很快. 大致的思路都是一致的,差不到哪里去,无非是枚举长度.值得一提的 ...
- 学习笔记之windows 网络编程
WinSock2.h编程接口笔记在Qtcreater中使用系统默认的库只需要在.pro文件中添加 LIBS += -lws2_32 添加头文件#include <WinSock2.h *初始化套 ...
- PHASER3 设置场景SCENE SLEEPING休眠和WAKE唤醒
A good way to set scene stop when hidden and run while visible again ! 使用sleep和wake方法的好处: 1.可以彻底让sce ...
- Unity编辑器扩展 Chapter3--Create Custom Inspector
一.Create Custom Inspector 重绘inspector面板一方面是我们的挂在脚本的窗口变得友好,另一方面可以让其变得更强大,比如添加一些有效性验证. 二.重要说明 1.Editor ...
- JavaScript 高级之面向对象
1. 对象属性及方法 创建对象的方式 <script> //创建对象的方式一 var obj = {}; //创建对象的方式一 var obj = new Object(); </s ...
- SVN服务器搭建及客户端配置
为什么要使用SVN? 在程序的编写过程中,每个程序员都会负责开发一个或多个模块,且开发中会生成很多不同的版本, 这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subvers ...
- Java访问控制
转自:菜鸟教程
- 随机生成30道四则运算-NEW
补充:紧跟上一个随机生成30道四则运算的题目,做了一点补充,可以有真分数之间的运算,于是需要在原来的基础上做一些改进. 首先指出上一个程序中的几个不足:1.每次执行的结果都一样,所以不能每天给孩子出3 ...