常州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 分布式程序开发 这一章会和我们前面进行的需求分析进行呼应,完成程序的开发. 开发步骤 分布式系统开发是一个复杂的过程,对于复杂过程,我们需要分解为简单步骤的组合. 针对每 ...
随机推荐
- Q&As:1.cocos2d-html5如何获得鼠标划过事件
不喜欢按部就班学东西,感觉各种框架各种技术就应该是拿到手用的,这应该是导致我现在学了这么多却没一样精通的缘故吧. 发现自己喜欢在QQ群回答一些菜鸟的问题,就算自己不清楚也会乐意看代码帮助解决╮(╯_╰ ...
- 安装完.net core sdk 后部署 ASP.NET Core 出现错误502.5
将项目升级到和sdk一样的版本 然后 命令行执行 iisreset
- html表单总结
总结了下html表单: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- 人脸检测及识别python实现系列(4)——卷积神经网络(CNN)入门
人脸检测及识别python实现系列(4)——卷积神经网络(CNN)入门 上篇博文我们准备好了2000张训练数据,接下来的几节我们将详细讲述如何利用这些数据训练我们的识别模型.前面说过,原博文给出的训练 ...
- leetcode个人题解——#39 Combination Sum
思路:先对数据进行排序(看评论给的测试数据好像都是有序数组了,但题目里没有给出这个条件),然后回溯加剪枝即可. class Solution { public: ; vector<vector& ...
- Wacom将在CES 2015上发布全新旗舰版Cintiq
Cintiq 27QHD和Cintiq 27QHD touch拥有宽大的工作表面,以及令人惊喜的屏幕笔触和颜色性能. 2015年1月6日,Wacom发布了Cintiq 27QHD和Cintiq 27Q ...
- WeakHashMap介绍
WeakHashMap简介 WeakHashMap 继承于AbstractMap,实现了Map接口. 和HashMap一样,WeakHashMap 也是一个散列表,它存储的内容也是键值对(key ...
- Python 装饰器Decorator(一)
(一) 装饰器基础知识 什么是Python装饰器?Python里装饰器是一个可调用的对象(函数),其参数是另一个函数(被装饰的函数) 假如有一个名字为somedecorator的装饰器,target是 ...
- Scrum立会报告+燃尽图(Beta阶段第四次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2386 项目地址:https://coding.net/u/wuyy694 ...
- 探路者 Alpha阶段中间产物
版本控制 git地址:https://git.coding.net/clairewyd/toReadSnake.git 贪吃蛇(单词版)软件功能说明书 1 开发背景 “贪吃蛇”这个游戏对于80, ...