•A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。
 #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 表示只能过一个点的更多相关文章

  1. 解决微信授权回调页面域名只能设置一个的问题 [php]

    最终的解决方案是:https://github.com/liuyunzhuge/php_weixin_proxy,详细的介绍请往下阅读. 在做项目集成微信登录以及微信支付的时候,都需要进行用户授权.这 ...

  2. 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。

    当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式.比如 select * from T_Employee where FNumber not in ( select top 5*  ...

  3. 一个java源文件中为什么只能有一个public类。

    我们都遇到过一个源文件中有多个java类,但当第一个类使用public修饰时,如果下面还有类使用public修饰,会报错.也就是是说一个java源文件最多只能有一个public类. 当有一个publi ...

  4. 让powershell同时只能运行一个脚本(进程互斥例子)

    powershell,mutex,互斥,进程互斥,脚本互斥 powershell脚本互斥例子,在powershell类别文章中,声明原创唯一. powershell 传教士 原创文章 2016-07- ...

  5. 怎么取消 Windows Server 2012 r2 RDP 限制每个用户只能进行一个会话(转)

    在 Windows Server 2008 / 2008 R2 上,如果希望多个远程用户使用同一个账号同时访问服务器的 Remote Desktop(RDP),只需通过管理工具-远程桌面下的“远程桌面 ...

  6. 解决微信OAuth2.0网页授权回调域名只能设置一个的问题

    https://github.com/HADB/GetWeixinCode GetWeixinCode 解决微信OAuth2.0网页授权回调域名只能设置一个的问题 使用方法 部署get-weixin- ...

  7. SSAS的维度表之间的关系只能有一个不能有多个

    我们在SSAS中创建维度的时候,有时候可能一个维度需要用到多个表的字段作为维度属性,那么这多个表之间势必存在关联关系,但是切记维度表之间的关联关系有且只能有一个不能有多个,下面我们来看一个例子. 现在 ...

  8. java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致.

    java的类必须大写 java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致. 在dos用上下箭头,调用已用过的命令

  9. 此集合已经采用方案 http 的地址。此集合中每个方案中最多只能包含一个地址。

    错误信息:此集合已经采用方案 http 的地址.此集合中每个方案中最多只能包含一个地址.如果服务承载于 IIS 中,则可以通过将“system.serviceModel/serviceHostingE ...

随机推荐

  1. 【总结整理】javascript的函数在if中调用时是否加括号---与.net的不同之处

    javascript的函数调用时是否加括号 if(event.preventDefault){ event.preventDefault(); if判断条件里面不要加括号,不加括号是应该以属性形式,i ...

  2. Learning Python 004 基础的数据类型和变量

    Python 基础的数据类型和变量 数据类型 整数 Python可以处理任意大小的整数,当然包括负整数. Python表示十六进制也用0x前缀. 浮点数 1.23x10^9和12.3x10^8是完全相 ...

  3. cygwin运行git submodule init出错error while loading shared libraries的解决

    installing the Devel\gettext package should solve your problem. git-submodule requires that. Unfortu ...

  4. vue.js2.0实战(1):搭建开发环境及构建项目

    Vue.js学习系列: vue.js2.0实战(1):搭建开发环境及构建项目 https://my.oschina.net/brillantzhao/blog/1541638 vue.js2.0实战( ...

  5. ZOJ 3939 The Lucky Week (暴力找规律)

    题意:给定一个幸运日,求第 k 个幸运日是多少. 析:由于闰年,每400肯定会循环一次,所以我们就可以先找出每400年会有多少幸运日,是2058个,然后再暴力. 代码如下: #pragma comme ...

  6. C#----接口的显式实现

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 接口 { ...

  7. 【java数据类型和mysqk数据类型对照表】

      java mysql 数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lan ...

  8. P1168 中位数(对顶堆)

    题意:维护一个序列,两种操作 1.插入一个数 2.输出中位数(若长度为偶数,输出中间两个较小的那个) 对顶堆 维护一个小根堆,一个大根堆,大根堆存1--mid,小根堆存mid+1---n 这样堆顶必有 ...

  9. pytho虚拟环境

    pip install virtualenv 进入项目目录 virtualenv venv 激活venv source venv/bin/activate  

  10. 【外部节点】json判断@表示正在处理的当前数组项或对象。过滤器还可用于$引用当前对象之外的属性

    $.store.book[?(@.price < $.expensive)] { "category" : "reference", "auth ...