hdu2874

news/2025/1/11 11:58:59/
/*
分析:
    LCA,我这个用的是Tarjan离线的,不懂的可以看lrj的黑书,
在讲树的部分讲到的。
    以前写过这个题,记得当时莫名其妙的tle了= =。。

                                                2013-06-14
*/





#include"iostream"
#include"cstdio"
#include"cstring"
using namespace std;
const int N=10005;
const int M=20005;
const int N_Q=2000005;int n,m,q,dis[N],vis[N],father[N],ans[N_Q/2];struct Edge{int v,len,next;
}edge[M];
int tot,head[N];
void add(int a,int b,int c){edge[tot].v=b;edge[tot].len=c;edge[tot].next=head[a];head[a]=tot++;edge[tot].v=a;edge[tot].len=c;edge[tot].next=head[b];head[b]=tot++;
}struct Ques{int v,index,next;
}Q[N_Q];
int q_tot,q_head[N];
void add_ques(int a,int b,int index){Q[q_tot].v=b;Q[q_tot].index=index;Q[q_tot].next=q_head[a];q_head[a]=q_tot++;Q[q_tot].v=a;Q[q_tot].index=index;Q[q_tot].next=q_head[b];q_head[b]=q_tot++;
}
int find(int k)
{if(father[k]==k)	return k;father[k]=find(father[k]);return father[k];
}
void Tarjan_LCA(int k,int deep,int root)
{int j,v;father[k]=k;vis[k]=root;dis[k]=deep;for(j=head[k];j!=-1;j=edge[j].next){v=edge[j].v;if(vis[v]!=-1)	continue;Tarjan_LCA(v,deep+edge[j].len,root);father[v]=k;}for(j=q_head[k];j!=-1;j=Q[j].next){v=Q[j].v;if(vis[v]!=root)	continue;ans[Q[j].index]=dis[v]+dis[k]-2*dis[find(v)];}
}int main()
{int i;int a,b,c;while(scanf("%d%d%d",&n,&m,&q)!=-1){tot=q_tot=0;memset(head,-1,sizeof(head));memset(q_head,-1,sizeof(q_head));while(m--)		{scanf("%d%d%d",&a,&b,&c);add(a,b,c);}for(i=0;i<q;i++){scanf("%d%d",&a,&b);ans[i]=-1;add_ques(a,b,i);}memset(vis,-1,sizeof(vis));for(i=1;i<=n;i++)	if(vis[i]==-1)	Tarjan_LCA(i,0,i);for(i=0;i<q;i++){if(ans[i]==-1)	printf("Not connected\n");else	printf("%d\n",ans[i]);}}return 0;
}



http://www.ppmy.cn/news/242150.html

相关文章

hdu2284

/* 分析: 水题&#xff0c;刚开始想了一个有点儿麻烦的&#xff0c;方法&#xff0c;囧~ 46MS&#xff0c;直接说方法了&#xff0c;假设NC(n,m)&#xff0c;那么直接暴力遍历C(n,1)到C(n,n) &#xff08;由于对称&#xff0c;所以后面一半是可以忽略的&#xff09;&#xff0c…

hdu2824

/* 分析&#xff1a; 欧拉函数。 才刚开始看那么一点儿数论&#xff0c;菜的不可思议~。欧拉函数 果题&#xff0c;没什么要多说的。 有点儿小无语的是&#xff0c;看到有300W的数据量&#xff0c;就想用数据 结构优化下&#xff0c;以便能迅速得到a到b之间的所有phi&#xff0…

hdu2047

阿牛的EOF牛肉串 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 30233 Accepted Submission(s): 14216 Problem Description 今年的ACM暑期集训队一共有18人&#xff0c;分为6支队伍。其中有一个叫做EOF的队…

IN4148

1N4148 编辑 1N4148是一种小型的高速开关 二极管&#xff0c;开关比较迅速&#xff0c;广泛用于信号频率较高的电路进行单向导通隔离&#xff0c;通讯、电脑板、电视机电路及工业控制电路 [1] 。 中文名 1N4148 本 质 小型的高速开关二极管 封 装 DO35、LL34、SOD323 应 …

hdu 2148

Score Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3126 Accepted Submission(s): 1994 Problem Description 转眼又到了一年的年末&#xff0c;Lele又一次迎来了期末考试。虽然说每年都要考试&#xff0…

PEP 484 – Type Hints

PEP 484 – Type Hints PEP 484 – 类型提示 原文地址&#xff1a;https://www.python.org/dev/peps/pep-0484/ PEP:484Title:Type HintsAuthor:Guido van Rossum Contents Abstract&#xff0c;摘要Rationale and Goals&#xff0c;理由和目标 Non-goals&#xff0c;非目标…

LCD12864.h

#ifndef __LCD12864_H #define __LCD12864_H /************* 12864LCD引脚定义 *************/ sbit LCD_CS P2^6; //寄存器选择输入 sbit LCD_SID P2^5; //液晶读/写控制 sbit LCD_SCLK P2^7; //液晶使能控制 sbit LCD_PSB P3^2; //串/并方式…

DHT11+LCD12864

基于STC12C5A60S2单片机的DHT11LCD12864代码 DHT11.hDHT11.cLCD12864.hLCD12864.c #ifndef __DHT11_H #define __DHT11_H#include <STC12C5A60S2.H> #include <intrins.h>#ifndef __UDEFINE_ #define __UDEFINE_ #define uchar unsigned char #define uint unsig…