swun1078 电科的味道

来源:互联网 发布:好看的日本电影知乎 编辑:程序博客网 时间:2024/05/06 16:25

描述

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

 

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;}

	
				
		
原创粉丝点击