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. (三)Hololens Unity 开发之 语音识别

    学习源于官方文档 Voice input in Unity 笔记一部分是直接翻译官方文档,部分各人理解不一致的和一些比较浅显的保留英文原文 (三)Hololens Unity 开发之 语音识别 Hol ...

  2. 二、利用EnterpriseFrameWork快速开发Web系统(B/S)

    EnterpriseFrameWork框架实例源代码下载: 实例下载 本章通过一个开发实例来讲解Web系统的开发经过,以及会碰到的一些问题.实例功能就是业务系统中最常见的增.删.改.查来演示,用一个界 ...

  3. eclipse查看源代码问题

    最近分析源代码时,eclipse总是出错,显示org.eclipse.core.runtime.CoreException,解决方法:在builderpath点击 add external jars, ...

  4. Codeforces Round #503 (by SIS, Div. 2) D. The hat

    有图可以直观发现,如果一开始的pair(1,1+n/2)和pair(x, x+n/2)大小关系不同 那么中间必然存在一个答案 简单总结就是大小关系不同,中间就有答案 所以就可以使用二分 #includ ...

  5. LeetCode 148——排序链表

    1. 题目 2. 解答 2.1 快速排序 可参考 快速排序和归并排序 中的第一种快速排序思想,与在数组中排序有两点不同. 第一,我们需要取最后一个元素作为主元,在数组中可以直接访问到最后一个元素,但在 ...

  6. 软工1816 · Alpha冲刺(5/10)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 后端代码复审 福大各个食堂的菜品口味量化.属性标记 组织前后端线下协作 接下来 ...

  7. Alpha冲刺——第六天

    Alpha第六天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...

  8. HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题

    参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上:  迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...

  9. Hbase的安装和配置

    1,准备好hbase的linux环境下的压缩包,这里hadoop版本为hadoop2.5.0,hbase版本为 2,解压缩这个版本,不选src的,其实两个任一都行 进入到hbase安装包目录,我这里的 ...

  10. HDU 2162 Add ‘em

    http://acm.hdu.edu.cn/showproblem.php?pid=2162 Problem Description Write a program to determine the ...