博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【题解】P2916 [USACO08NOV]安慰奶牛Cheering up the Cow-C++
阅读量:5303 次
发布时间:2019-06-14

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

这道题用最小生成树来完成,我选用的是kruskal(克鲁斯卡尔)来完成。

这道题目在克鲁斯卡尔模板的基础上,有变动的地方只有2处:
1.因为必须从一个点出发,而最小生成树最后会让所有点都连通,所以最优的是从c[i]值最低的点出发,所以最后的total要加上最小的c[i]值。
2.因为这道题目的权值很特殊,它包含了2*路的长度(来回走两次)+起点的c[i]+终点的c[i](这个也要花费时间),在读入的时候直接处理就可以了。
代码就贴在这,因为考虑可能有些题目会卡输入,用了快读,介意的自己改一下就行了(滑稽)

1 #include
2 using namespace std; 3 int n,p,c[100010],fa[100010]; 4 int read() 5 { 6 int x=0,f=1; 7 char ch=getchar(); 8 while(ch<'0'||ch>'9'){ 9 if(ch=='-')10 f=-1;11 ch=getchar();12 }13 while(ch>='0'&&ch<='9'){14 x=(x<<1)+(x<<3)+(ch^48);15 ch=getchar();16 }17 return x*f;18 }19 struct node20 {21 int u,v,w;22 node(){}23 node(int vv,int ww)24 {25 v=vv,w=ww;26 }27 }g[100010];28 bool cmp(node a,node b)29 {30 return a.w
>n>>p;52 init();53 int minc=0x3f3f3f3f;54 for(int i=1;i<=n;i++)55 {56 c[i]=read();57 minc=min(minc,c[i]); 58 } 59 for(int i=1;i<=p;i++)60 g[i].u=read(),g[i].v=read(),g[i].w=read()*2+c[g[i].u]+c[g[i].v];61 sort(g+1,g+1+p,cmp);62 int cnt=0;63 int total=0;64 for(int i=1;i<=p;i++)65 {66 if(merge(g[i].u,g[i].v))67 {68 cnt++;69 total+=g[i].w;70 }71 }72 cout<
<

 

转载于:https://www.cnblogs.com/moyujiang/p/11213343.html

你可能感兴趣的文章
SqlBulkCopy大批量导入数据
查看>>
pandas 修改指定列中所有内容
查看>>
「 Luogu P2285 」打鼹鼠
查看>>
lua语言入门之Sublime Text设置lua的Build System
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>
Java抽象类和接口的比较
查看>>
开发进度一
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
CSS
查看>>
[LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
程序集的混淆及签名
查看>>
判断9X9数组是否是数独的java代码
查看>>
00-自测1. 打印沙漏
查看>>
UNITY在VS中调试
查看>>