swun1078 电科的味道

描述

电科集训已经结束很久,但电科种种味道却让我们久久回味。

 

LZH对电科校园里的各种气味尤为深刻,这些怪异的气味常常让他的食欲大减。因此不管去哪,他总是希望走“最佳路线”。

 

LZH把电科所有路径都标记了一个气味值Wi,Wi越小,表示该路径上的气味越为怪异难闻。

所谓的从a地到b地“最佳路线”便是指a地到b地所有可能的路线方案中,W之和最大的那条路线。

 

注意:当LZH重复经过同一条路径时,该路径上的Wi值只会被计算一次(重边代表不同的路径)。

 

现在,LZH有Q个浏览校园的计划,他希望你告诉他的每个计划中,“最佳路线”上的W之和是多少

输入

多组测试数据

每组测试数据的第一行有三个整数N,M和Q,分别表示电科由N个顶点,M条无向边组成,并且LZH有Q个计划 (其中 0 < N <= 100 , 0 < M <= 10000 , 0 < Q <= 10000)

接下来的M行,每行有3个整数a,b ,W,表示点a与点b之前有一条直接相连的路径,且路径的“气味值”为W。 (其中 0 < a,b < N   0< W <10000

接下来的Q行,每行有两个整数u,v ,表示LZH的浏览计划是从点u逛到点v。

输出

输出共有Q行,若无法从u到达 v,则输出No solution

否则,输出“最佳路线”上的W之和

样例输入

6 4 3
1 2 3
2 3 4
3 5 1
4 5 2
1 4
4 1
6 4

样例输出

10
10
No solution

 

**************************************************************************************************************************************************************************************

 

题目链接: http://218.194.91.48/acmhome/problemdetail.do?&method=showdetail&id=1078

 

题目大意是求各棵树(连通图)内所有值的和,因为就算目的地在眼前,苊也可以先去逛两圈(只记录一次)再回来去目的地,只有没在一个连通图才输了No solution。

题目中说了如果有重边则当有多条路(上面红字),所以合并的时候只合并一次但w的值还是要继续加,这个不知道可不可以算个坑!!下次一定不能在一棵树上吊死!

 

AC代码:

 

#include<cstdio>
#include<algorithm>
#include<cstring>

using namespace std;
int an[110],n,m,Q,Q1,Q2,sum,cnt[110];
void Init(){
	int i;
	for(i=1;i<=n;i++)
		an[i]=i;
}
int Find(int x){
	while(x!=an[x]) x=an[x];
	return x;
}
void Union(int a,int b,int c){
	int ra=Find(a),rb=Find(b);
	an[rb]=ra;
	if(ra!=rb) cnt[ra]+=cnt[rb];//当根节点不同时才加,不然要要加多 
	cnt[ra]+=c;//这个才是每次都要加 
}
int main(){
	int i,d,j,rq,x,y;
	while(~scanf("%d%d%d",&n,&m,&Q)){
		memset(cnt,0,sizeof(cnt));
		Init();
		 for(i=0;i<m;i++){
		 	scanf("%d%d%d",&x,&y,&d);
		 	Union(x,y,d);
		 }
		 while(Q--){
		 	scanf("%d%d",&Q1,&Q2);
		 	rq=Find(Q1);
		 	if(rq!=Find(Q2)) puts("No solution");
		 	else printf("%d\n",cnt[rq]);
		 }
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值