博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常州day5
阅读量:5960 次
发布时间:2019-06-19

本文共 3645 字,大约阅读时间需要 12 分钟。

Task 1

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

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

最小生成树裸题

时间复杂度 O(nlogn)

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #define il inline 9 #define re register10 using namespace std;11 const int N=1000001;12 struct edge{ int x,y,z;13 } e[N];14 int n,m,k,f[N],ans=0,cnt=0;15 il bool cmp(edge a,edge b){16 return a.z>b.z;17 }18 il int getfather(int u){19 if(!f[u]) return u;20 return f[u]=getfather(f[u]);21 }22 int main(){23 freopen("carpet.in","r",stdin);24 freopen("carpet.out","w",stdout);25 scanf("%d%d%d",&n,&m,&k);26 for(int i=1;i<=m;i++)27 scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].z);28 sort(e+1,e+m+1,cmp);29 for(int i=1,fx,fy;i<=m;i++){30 fx=getfather(e[i].x);31 fy=getfather(e[i].y);32 if(fx==fy) continue;33 f[fx]=fy;34 ans+=e[i].z;35 cnt++;36 if(cnt==k) break;37 }38 cout<

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))

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #define il inline 9 #define re register10 using namespace std;11 int prime[10001],tot=0;12 bool chk[10001];13 int n,m,f[1010][110];14 long long ans=1;15 int main(){16 freopen("calc.in","r",stdin);17 freopen("calc.out","w",stdout);18 memset(chk,false,sizeof(chk));19 scanf("%d%d",&n,&m);20 for(int i=2;i<=n;i++){21 if(!chk[i]){22 prime[++tot]=i;23 for(int j=i+i;j<=n;j+=i)24 chk[j]=true; 25 }26 }27 for(int k=1;k<=tot;k++){28 memset(f,false,sizeof(f));29 for(int i=1,j;i<=n;i++){30 f[i][0]=0;j=i;31 while(j%prime[k]==0){32 j/=prime[k];f[i][0]++;33 }34 }35 for(int i=1;i<=m;i++) f[0][i]=0;36 for(int i=1;i<=n;i++)37 for(int j=1;j<=m;j++){38 f[i][j]=f[i-1][j]+f[i][j-1];39 if(f[i][j]>1000000009) f[i][j]-=1000000009;40 }41 ans=ans*(1ll+f[n][m])%1000000009ll;42 }43 // cout<
<

Task 3

 

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

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

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #define il inline10 #define re register11 using namespace std;12 struct edge{ int next,to,val;13 } e[2000001];14 int n,m,c,s,t,M,p[100001],r[100001],q[100001],hs,h[100001];15 int d[100001],g[10001][101],v[100001],inq[100001];16 queue
que;17 il void addedge(int x,int y,int z,int l){18 e[++M]=(edge){g[x][l],y,z};g[x][l]=M;19 }20 il void adde(int x,int y,int z){21 e[++M]=(edge){g[x][0],y,z};g[x][0]=M;22 }23 il void path(int h,int q){24 for(int i=1;i<=n;i++) d[i]=(1<<29);25 d[h]=0;que.push(h);26 while(!que.empty()){27 int h=que.front();que.pop();inq[h]=false;28 for(int i=g[h][q];i;i=e[i].next){29 if(d[e[i].to]>d[h]+e[i].val){30 d[e[i].to]=d[h]+e[i].val;31 if(!inq[e[i].to]){32 inq[e[i].to]=true;33 que.push(e[i].to);34 }35 }36 }37 }38 }39 int main(){40 freopen("railway.in","r",stdin);41 freopen("railway.out","w",stdout);42 scanf("%d%d%d%d%d",&n,&m,&c,&s,&t);43 for(int i=1,x,y,z,l;i<=m;i++){44 scanf("%d%d%d%d",&x,&y,&z,&l);45 addedge(x,y,z,l);46 addedge(y,x,z,l);47 }48 for(int i=1;i<=c;i++)49 scanf("%d",&p[i]);50 for(int i=1;i<=c;i++){51 for(int j=1;j

 

转载于:https://www.cnblogs.com/ExiledPoet/p/5781476.html

你可能感兴趣的文章
安装配置discuz
查看>>
线程互互斥锁
查看>>
KVM虚拟机&openVSwitch杂记(1)
查看>>
win7下ActiveX注册错误0x80040200解决参考
查看>>
《.NET应用架构设计:原则、模式与实践》新书博客--试读-1.1-正确认识软件架构...
查看>>
2013 Linux领域年终盘点
查看>>
linux学习之查看程序端口占用情况
查看>>
相逢在栀枝花开的季节
查看>>
linux下git自动补全命令
查看>>
Ubuntu14.04LTS更新源
查看>>
Linux报“Unknown HZ value! (288) Assume 100”错误
查看>>
mysql多实例实例化数据库
查看>>
我的友情链接
查看>>
golang xml和json的解析与生成
查看>>
javascript 操作DOM元素样式
查看>>
Android 内存管理 &Memory Leak & OOM 分析
查看>>
【查找算法】基于存储的查找算法(哈希查找)
查看>>
JavaWeb网上图书商城完整项目--day02-10.提交注册表单功能之页面实现
查看>>
做程序开发的你如果经常用Redis,这些问题肯定会遇到
查看>>
006android初级篇之jni数据类型映射
查看>>