ccf 201903-5 317任务

用全源最短路径只能得60,因为数据太大了,全源最短大概复杂度为O(n*m*logn),大概要1-2秒左右超时,想不到好的算法qaq。
#include<bits/stdc++.h>
using namespace std;
#define maxn 10003
vector<pair<int,int> > ss[maxn];
int jl[maxn][maxn]; int f[maxn];
int ff(int x){
if(f[x]==x)return x;
int k=f[x];
f[x]=f[k];
return ff(k);
} void unionnode(int n,int m){
int a=ff(n),b=ff(m);
if(a==b)return ;
f[a]=b;return ;
} bool pd(int a,int b){
return ff(a)==ff(b);
} int main(){
ios::sync_with_stdio(false);
int n,m,k;cin>>n>>m>>k;
vector<int> ll;
int d[n+1];
for(int i=1;i<n+1;i++){
cin>>d[i];
if(d[i]){
ll.push_back(i);
}
}
for(int i=1;i<maxn;i++){
f[i]=i;
}
while(m--){
int a,b,c;
cin>>a>>b>>c;
unionnode(a,b);
ss[a].push_back({b,c});
ss[b].push_back({a,c});
}
memset(jl,0x3f,sizeof(jl));
for(int i=1;i<n+1;i++){
jl[i][i]=0;
}
priority_queue<pair<int,int> > q;
for(auto i:ll){
while(!q.empty())q.pop();
for(int j=1;j<=i;j++){
if(jl[i][j]!=jl[0][0])q.push({0,j});
}
int vis[n+1]={0};
while(!q.empty()){
int b=q.top().second;q.pop();
if(vis[b])continue;
vis[b]=1;
for(int j=0;j<ss[b].size();j++){
int node=ss[b][j].first,t=ss[b][j].second;
if(vis[node])continue;
if(jl[i][b]+t>=jl[i][node])continue;
jl[i][node]=jl[i][b]+t;
q.push({-jl[i][node],node});
}
}
}
int sz[maxn];
for(int i=1;i<n+1;i++){
int cnt=0;
long long cost=0;
for(auto x:ll){
if(pd(i,x)){
sz[cnt++]=jl[x][i];
}
}
sort(sz,sz+cnt);
for(int j=0;j<min(cnt,k);j++){
cost+=sz[j];
}
cout<<cost;
i==n||cout<<endl;
}
return 0;
} /*
7 6 2
1 0 1 0 1 1 0
1 4 1
1 2 3
2 4 4
2 3 5
2 5 7
6 7 5
*/
ccf 201903-5 317任务的更多相关文章
- 第16次CCF CSP认证-第5题-317 号子任务(subtask317)-图论最短路径
[题目背景]“你在平原上走着走着,突然迎面遇到一堵墙,这墙向上无限高,向下无限深,向左无限远,向右无限远,这墙是什么?”——<流浪地球>原著我们带着地球去流浪了,为了处理流浪过程中可能会发 ...
- CCF(317号子任务)-35分:Dijikstra算法
317号子任务 201903-5 为了过前60分,想使用dijikstra优化算法的,但是最后还是只过了35分.这里的思路只需要先将所有的行星据点进行一次dijikstra,分别存储所有点到行星的最短 ...
- ccf 201903-5 317号子任务(60分)
看到这题,第一印象,用dijkstra算法求n次单源最短路,时间复杂度O(n^3),超时30分妥妥的. 于是用优先队列优化,O(n*mlogm),快很多,但依然30. 那么不妨换一种思路,题目要求的是 ...
- CCF考试
第八次CCF考试记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四题的代码 第 ...
- [codeforces 317]A. Perfect Pair
[codeforces 317]A. Perfect Pair 试题描述 Let us call a pair of integer numbers m-perfect, if at least on ...
- CCF关于NOIP2014复赛报名的通知
CCF关于NOIP2014复赛报名的通知 CCF NOIP2014复赛全部实行网上注册.报名.未通过网上报名的选手将不具备参赛和申诉资格. 系统注册须知: NOIP2014复赛注册时间:2014年 ...
- [CCF] Z字形扫描
CCF Z字形扫描 感觉和LeetCode中的ZigZag还是有一些不一样的. 题目描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z ...
- [CCF] ISBN号码检测
CCF ISBN号码检测 题目概述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如"x-xxx-xxxxx-x",其 ...
- CCF NOI系列活动
NOI-全国青少年信息学奥林匹克竞赛全国青少年信息学奥林匹克竞赛(NOI)是国内信息学领域内面向中学生的最高水平的大赛,每省派经选拔产生的选手(其中一名是女选手)参加,NOI每年在不同的省市举行. N ...
随机推荐
- SimpleDateFormat日期格式化总结
1.new一个java.util.Date对象,调用它的setYear.setMonth等等方法,设置你要的年月日.不过这种做法不推荐,因为setYear等方法已经过时了.2.new一个java.ut ...
- 网络流24题 P1251 餐巾计划问题 拆点
题目描述 一个餐厅在相继的 NN 天里,每天需用的餐巾数不尽相同.假设第 ii 天需要 r_iri块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费用为 pp 分;或者把旧餐巾送 ...
- Java 7 和 Java 8 中的 HashMap原理解析
HashMap 可能是面试的时候必问的题目了,面试官为什么都偏爱拿这个问应聘者?因为 HashMap 它的设计结构和原理比较有意思,它既可以考初学者对 Java 集合的了解又可以深度的发现应聘者的数据 ...
- PHP实现部分字符隐藏
/** * 隐藏部分字符串 * # 此方法多用于手机号码或身份证号.银行卡号的中间部分数字的隐藏 */ function func_substr_replace($str, $replacement ...
- 小小知识点(八)——星座图与PSK、QAM调制的关系
星座图是对PSK和QAM调制相位和幅度的一种表示,让我们只关注被调制参量本身,而不管已调信号波形及其频率. 在信号传输仿真时也一样,我们只关注携带信息的幅值和相位,而不管信号的传输波形和频率.这就是为 ...
- DAY18、常用模块
一.random:随机数1.(0,1) 小数:random.random()2.[1,10] 整数:random.randint(1,10)3.[1,10) 整数:random.randrange(1 ...
- cocos 常用组件
前面的话 本文将详细介绍 cocos 中的常用组件 Sprite [概述] Sprite(精灵)是 2D 游戏中最常见的显示图像的方式,在节点上添加 Sprite 组件,就可以在场景中显示项目资源中的 ...
- WebSocket介绍,与Socket的区别
WebSocket介绍与原理 WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).一开始的握手需要借助HTTP请求完成. ——百 ...
- python 第三方库的加载与虚拟机的登录
通过pip来安装python模块(pip方式仅需要联网即可,不需要下载其他文件即可实现扩展库哦的安装.升级和卸载).下载python3.5以上的版本(包括3.5),在我的电脑输入cmd进入命令提示符, ...
- jqgrid的增删改查
这个是要写的页面(需要引入下面的js页面) 1 <div class="modal-body" width="100%" style="over ...