模板

意甲冠军:给你一个图,1始终根,每一方都有单价值,每个点都有权重新。

每个边缘的价格值 = sum(后继结点重)*单价方值。

最低价格要求树值,它构成了一棵树n-1条边的最小价值。

算法:

1、由于每一个边的价值都要乘以后来訪问的节点的权重。而走到后来訪问的点必经过这条边。

实际上总价值就是  到每一个点的最短路径*这个点的权重。

2、可是这个题 数据量真的太大了。50000个点,50000条边。

写普通的dij算法tle。

必须加优先队列优化- -

据说spfa也能过。可是spfa算法不稳定- -,一般没有负权,则用优先队列或堆优化的dijkstra算法

应该能解决这个问题。

3、坑点:点为0或者1时,价值为0,要特判。否则也会tle。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#define maxn 50010 const __int64 INF = 10000000000; using namespace std; struct node
{
int to,next,val;
}edge[maxn*2]; int v,head[maxn],c[maxn],cnt;
long long dis[maxn];
bool vis[maxn];
typedef pair<long long,int> PII;
priority_queue<PII, vector<PII> ,greater<PII> > q; void add(int x,int y,int z)
{
edge[cnt].to = y;
edge[cnt].val = z;
edge[cnt].next = head[x];
head[x] = cnt++;
} long long dij()
{
for(int i=2;i<=v;i++)
dis[i] = INF;
while(!q.empty())
q.pop();
int sum = 0;
long long ret = 0;
long long x;
int y;
dis[1] = 0;
q.push(make_pair(dis[1],1));
while(!q.empty())
{
PII cur = q.top();
q.pop();
x = cur.first;
y = cur.second;
if(vis[y]) continue;
vis[y] = true;
sum++;
ret += x*c[y];
for(int i=head[y];i!=-1;i=edge[i].next)
{
int u = edge[i].to,p = edge[i].val;
if(dis[u]>dis[y]+p)
{
dis[u] = dis[y]+p;
q.push(make_pair(dis[u],u));
}
}
}
if(sum<v) return -1;
else return ret;
} int main()
{
int T,w,a,b,cost;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&v,&w);
memset(head,-1,sizeof(head));
cnt = 0;
for(int i=1;i<=v;i++)
scanf("%d",&c[i]);
for(int i=0;i<w;i++)
{
scanf("%d%d%d",&a,&b,&cost);
add(a,b,cost);
add(b,a,cost);
}
if(v<=1)
{
printf("0\n");
continue;
} memset(vis,0,sizeof(vis));
long long ans = dij();
if(ans == -1) printf("No Answer\n");
else printf("%I64d\n",ans);
}
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

poj 3013 Big Christmas Tree (dij+优先级队列优化 求最短)的更多相关文章

  1. POJ 3013 Big Christmas Tree(最短Dijkstra+优先级队列优化,SPFA)

    POJ 3013 Big Christmas Tree(最短路Dijkstra+优先队列优化,SPFA) ACM 题目地址:POJ 3013 题意:  圣诞树是由n个节点和e个边构成的,点编号1-n. ...

  2. poj 3013 Big Christmas Tree (最短路径Dijsktra) -- 第一次用优先队列写Dijsktra

    http://poj.org/problem?id=3013 Big Christmas Tree Time Limit: 3000MS   Memory Limit: 131072K Total S ...

  3. poj 3013 Big Christmas Tree

    Big Christmas Tree Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 20974   Accepted: 4 ...

  4. poj 3013 Big Christmas Tree Djistra

    Big Christmas Tree 题意:图中每个节点和边都有权值,图中找出一颗树,树根为1使得 Σ(树中的节点到树根的距离)*(以该节点为子树的所有节点的权值之和) 结果最小: 分析:直接求出每个 ...

  5. SPFA/Dijkstra POJ 3013 Big Christmas Tree

    题目传送门 题意:找一棵树使得造价最少,造价为每个点的子节点造价和*边的造价和 分析:最短路跑出1根节点到每个点的最短边权值,然后每个点的权值*最短边距和就是答案,注意INF开足够大,n<=1特 ...

  6. POJ 2227 The Wedding Juicer (优先级队列+bfs+dfs)

    思路描述来自:http://hi.baidu.com/perfectcai_/item/701f2efa460cedcb0dd1c820也可以参考黑书P89的积水. 题意:Farmer John有一个 ...

  7. poj 3017 Cut the Sequence(单调队列优化 )

    题目链接:http://poj.org/problem?id=3017 题意:给你一个长度为n的数列,要求把这个数列划分为任意块,每块的元素和小于m,使得所有块的最大值的和最小 分析:这题很快就能想到 ...

  8. poj 3259 Wormholes : spfa 双端队列优化 判负环 O(k*E)

    /** problem: http://poj.org/problem?id=3259 spfa判负环: 当有个点被松弛了n次,则这个点必定为负环中的一个点(n为点的个数) spfa双端队列优化: 维 ...

  9. 【POJ 2010 Moo University-Financial Aid】优先级队列

    题目链接:http://poj.org/problem?id=2010 题意:C只牛犊,各有自己的分数score和申请的补助aid,现要选出N只(N为奇数),使得其aid的总和不超过F,且按score ...

随机推荐

  1. poj3667(线段树)

    题目连接:http://poj.org/problem?id=3667 题意:1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 2 a b:将[a,a+b-1]的房间清空 线段树操作:upd ...

  2. jenkins 集成 redmine 账户验证的方案

    jenkins 集成 redmine 账户验证的方案 赖勇浩(http://laiyonghao.com) 动机 Jenkins 是最著名的持续集成工具,又因为它开源免费.插件众多,成为了许多团队做持 ...

  3. veridata实验举例(6)验证agent启动先后顺序是否对捕获update操作有影响

    veridata实验举例(6)验证agent启动先后顺序是否对捕获update操作有影响 续接veridata实验系列  上篇:"veridata实验举例(5)改动主键上的列值.update ...

  4. android &quot;Missing type parameter&quot; 错误

    近期在做android应该的时候出现这个问题,分析了一下日志,发现是在gosn解析的时候会出现,并且出现的时候非常诡异.于是去网上找相关资料. 发现这个问题还是比較常见的,原来是公布版本号和非正式公布 ...

  5. A First Exploration Of SolrCloud

    A First Exploration Of SolrCloud Update: this article was published in August 2012, before the very ...

  6. Cocos2d-X研究之v3.x瓦片地图具体解释

    在游戏开发过程中,我们会遇到超过屏幕大小的地图,比如即时战略游戏,使得玩家能够在地图中滚动游戏画面.这类游戏一般会有丰富的背景元素,假设直接使用背景图切换的方式,须要为每一个不同的场景准备一张背景图, ...

  7. java IO流文件的读写具体实例

    IO流的分类:1.根据流的数据对象来分:高端流:所有的内存中的流都是高端流,比如:InputStreamReader  低端流:所有的外界设备中的流都是低端流,比如InputStream,Output ...

  8. 一类斜率优化的dp(特有性质:只能连续,不能交叉)

    hdu3480 给定一个有n个数的集合,将这个集合分成m个子集,要求子集的并等于全集求花费最小. 花费为该子集的(最大数-最小数)的平方. 我们将n个数排序, a < b < c < ...

  9. 简介支持向量机热门(认识SVM三位置)

    支持向量机通俗导论(理解SVM的三层境地) 作者:July .致谢:pluskid.白石.JerryLead.出处:结构之法算法之道blog. 前言 动笔写这个支持向量机(support vector ...

  10. Oracle SQL Lesson (6) - 使用Join进行联合查询

    使用连接SQL 1999SELECT table1.column, table2.columnFROM table1[NATURAL JOIN table2] |[JOIN table2 USING ...