NOIP2013Day1T3 表示只能过一个点
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct node
{
int u;
int v;
int w;
}edge[];
int num=;
int maxn[][];
int f[];
int x,y;
int ans=0x7fffffff;
int cmp(const node &a,const node &b)
{
return a.w>b.w;
}
int find(int x)
{
if(x!=f[x])
f[x]=find(f[x]);
return f[x];
}
void unionn(int x,int y)
{
int fx=find(x);
int fy=find(y);
f[fx]=fy;
}
int vis[];
int n,m;
int flag=;
int dfs(int p)
{
if(p==y)
flag=;
else
{
for(int i=;i<=n;i++)
{
if(vis[i]==&&maxn[p][i]!=0x7fffffff)
{
vis[i]=;
ans=min(ans,maxn[p][i]);
dfs(i);
vis[i]=;
ans=min(ans,maxn[p][i]);
} }
}
//printf("%d",ans);
}
int main()
{ scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)f[i]=i;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&edge[num].u,&edge[num].v,&edge[num].w);
num++;
}
sort(edge+,edge+num,cmp);
int k=;
for(int i=;i<=num;i++)
{
if(find(edge[i].u)!=find(edge[i].v))
{
unionn(edge[i].u,edge[i].v);
//maxn[edge[i].v]=max(edge[i].w,maxn[edge[i].v]);
//maxn[edge[i].u]=max(edge[i].w,maxn[edge[i].u]);
maxn[edge[i].u][edge[i].v]=max(maxn[edge[i].u][edge[i].v],edge[i].w);
maxn[edge[i].v][edge[i].u]=max(maxn[edge[i].u][edge[i].v],edge[i].w);
k++;
}
if(k==n-)break;
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(maxn[i][j]==)
maxn[i][j]=0x7fffffff;
}
/*for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(maxn[i][k]!=0x7fffffff&&maxn[k][j]!=0x7fffffff)
if(maxn[i][j]>maxn[i][k]+maxn[k][j])
maxn[i][j]=maxn[i][k]+maxn[k][j];
}
}
}*/
int q;
scanf("%d",&q);
for(int i=;i<=q;i++)
{
flag=;
memset(vis,,sizeof(vis));
ans=0x7fffffff;
scanf("%d%d",&x,&y);
dfs(x);
//printf("*******************************\n");
if(ans!=0x7fffffff&&flag==)
printf("%d\n",ans);
else
printf("-1\n");
//printf("*******************************\n");
/*if(maxn[x][y]==0)
printf("-1\n");
else
printf("%d\n",maxn[x][y]);*/
/*for(int j=x;j<=y;j++)
{
if(maxn[j]<maxnnow&&maxn[j]!=0)
maxnnow=maxn[j];
}
if(maxnnow==0x7ffff)printf("-1\n");
else printf("%d\n",maxnnow);*/
}
return ;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct node
{
int u;
int v;
int w;
}edge[];
int num=;
int maxn[][];
int f[];
int x,y;
int ans=0x7fffffff;
int cmp(const node &a,const node &b)
{
return a.w>b.w;
}
int find(int x)
{
if(x!=f[x])
f[x]=find(f[x]);
return f[x];
}
void unionn(int x,int y)
{
int fx=find(x);
int fy=find(y);
f[fx]=fy;
}
int vis[];
int n,m;
int flag=;
int dfs(int p)
{
if(p==y)
flag=;
else
{
for(int i=;i<=n;i++)
{
if(vis[i]==&&maxn[p][i]!=0x7fffffff)
{
vis[i]=;
ans=min(ans,maxn[p][i]);
dfs(i);
vis[i]=;
ans=min(ans,maxn[p][i]);
} }
}
//printf("%d",ans);
}
int main()
{ scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)f[i]=i;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&edge[num].u,&edge[num].v,&edge[num].w);
num++;
}
sort(edge+,edge+num,cmp);
int k=;
for(int i=;i<=num;i++)
{
if(find(edge[i].u)!=find(edge[i].v))
{
unionn(edge[i].u,edge[i].v);
//maxn[edge[i].v]=max(edge[i].w,maxn[edge[i].v]);
//maxn[edge[i].u]=max(edge[i].w,maxn[edge[i].u]);
maxn[edge[i].u][edge[i].v]=max(maxn[edge[i].u][edge[i].v],edge[i].w);
maxn[edge[i].v][edge[i].u]=max(maxn[edge[i].u][edge[i].v],edge[i].w);
k++;
}
if(k==n-)break;
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(maxn[i][j]==)
maxn[i][j]=0x7fffffff;
}
/*for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(maxn[i][k]!=0x7fffffff&&maxn[k][j]!=0x7fffffff)
if(maxn[i][j]>maxn[i][k]+maxn[k][j])
maxn[i][j]=maxn[i][k]+maxn[k][j];
}
}
}*/
int q;
scanf("%d",&q);
for(int i=;i<=q;i++)
{
flag=;
memset(vis,,sizeof(vis));
ans=0x7fffffff;
scanf("%d%d",&x,&y);
dfs(x);
//printf("*******************************\n");
if(ans!=0x7fffffff&&flag==)
printf("%d\n",ans);
else
printf("-1\n");
//printf("*******************************\n");
/*if(maxn[x][y]==0)
printf("-1\n");
else
printf("%d\n",maxn[x][y]);*/
/*for(int j=x;j<=y;j++)
{
if(maxn[j]<maxnnow&&maxn[j]!=0)
maxnnow=maxn[j];
}
if(maxnnow==0x7ffff)printf("-1\n");
else printf("%d\n",maxnnow);*/
}
return ;
}
NOIP2013Day1T3 表示只能过一个点的更多相关文章
- 解决微信授权回调页面域名只能设置一个的问题 [php]
最终的解决方案是:https://github.com/liuyunzhuge/php_weixin_proxy,详细的介绍请往下阅读. 在做项目集成微信登录以及微信支付的时候,都需要进行用户授权.这 ...
- 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。
当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式.比如 select * from T_Employee where FNumber not in ( select top 5* ...
- 一个java源文件中为什么只能有一个public类。
我们都遇到过一个源文件中有多个java类,但当第一个类使用public修饰时,如果下面还有类使用public修饰,会报错.也就是是说一个java源文件最多只能有一个public类. 当有一个publi ...
- 让powershell同时只能运行一个脚本(进程互斥例子)
powershell,mutex,互斥,进程互斥,脚本互斥 powershell脚本互斥例子,在powershell类别文章中,声明原创唯一. powershell 传教士 原创文章 2016-07- ...
- 怎么取消 Windows Server 2012 r2 RDP 限制每个用户只能进行一个会话(转)
在 Windows Server 2008 / 2008 R2 上,如果希望多个远程用户使用同一个账号同时访问服务器的 Remote Desktop(RDP),只需通过管理工具-远程桌面下的“远程桌面 ...
- 解决微信OAuth2.0网页授权回调域名只能设置一个的问题
https://github.com/HADB/GetWeixinCode GetWeixinCode 解决微信OAuth2.0网页授权回调域名只能设置一个的问题 使用方法 部署get-weixin- ...
- SSAS的维度表之间的关系只能有一个不能有多个
我们在SSAS中创建维度的时候,有时候可能一个维度需要用到多个表的字段作为维度属性,那么这多个表之间势必存在关联关系,但是切记维度表之间的关联关系有且只能有一个不能有多个,下面我们来看一个例子. 现在 ...
- java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致.
java的类必须大写 java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致. 在dos用上下箭头,调用已用过的命令
- 此集合已经采用方案 http 的地址。此集合中每个方案中最多只能包含一个地址。
错误信息:此集合已经采用方案 http 的地址.此集合中每个方案中最多只能包含一个地址.如果服务承载于 IIS 中,则可以通过将“system.serviceModel/serviceHostingE ...
随机推荐
- CSS之BFC详解
What:了解该知识点的概念,本质以及有关牵扯到的相关知识概念 BFC这个东西说常见的话你可能不觉得,但是你肯定会常用,也许你在用的时候也没想到BFC这东西.网上也有很多写这些东西的文章,但是自己写一 ...
- URL中#符号的作用
转自http://blog.sina.com.cn/s/blog_6f9eb2dd0100sk97.html 一.#的涵义 #代表网页中的一个位置.其右面的字符,就是该位置的标识符.比如, ...
- Python及R安装包版本查看方法
R包查询 查询已安装的所有的包:library() 或installed.packages()(括号内为空,区别以上两项) 查询具体包的信息: help(package="pheatmap& ...
- Eclipse插件无法识别的解决方法汇总
参考 http://www.cnblogs.com/apollolee/archive/2013/06/18/3142243.html
- 从零开始安装 Ambari (2) -- 准备本地 repository
安装 Ambari,最后是为了用它部署 hadoop 集群.安装时默认使用的是 hortonworks 远程的资源,用它部署集群时,需要下载 Hadoop.Hive.HBase 的安装包,速度很慢.我 ...
- SQL Server 2012安装——.net framework 3.5离线安装
前言 电脑用着一直很不舒服,所以就决定对电脑重新配置一番,在装数据库这里,可谓是屡装屡败.自己感觉太麻烦了,于是每次数据库装失败后,就重装系统,然后配置上网文档,这样一来,弄得自己挺恶心,这次很明显成 ...
- 788B(dfs+xjb)
题目链接: http://codeforces.com/problemset/problem/788/B 题意: 给出一个有 n 个顶点和 m 条边的图(没有重边,可能有自环), 可以从中任意一个顶点 ...
- 洛谷P3527 [POI2011]MET-Meteors(整体二分)
传送门 整体二分 先二分一个答案,判断是否可行,把可行的全都扔到左边,不可行的扔到右边 判断是否可行用树状数组就行 具体细节看代码好了 整体二分细节真多……也可能是我大脑已经退化了? //minamo ...
- Scanner类、Random类、ArrayList类
先写个框架,复习内容后来添加... 先写个框架,复习内容后来添加... 先写个框架,复习内容后来添加... 先写个框架,复习内容后来添加... 先写个框架,复习内容后来添加... 先写个框架,复习内容 ...
- 洛谷P2574 XOR的艺术
题目描述 \(AKN\)觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为\(n\)的\(01\)串. 2 ...