因为涉及到算法,所以就不把全部题目放到一个文章里了,方便以后找相关算法的时候查看。
HDU 2874
题意:给定一些点和边,询问两点之间是否连通,若连通,输出最短距离。
思路:离线tarjan算法,与其他裸题的区别就是要判是否在一棵树上。
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
struct kdq
{
int e,l,next ;
} ed[Max] ,ee[2000005] ;
int head1[Max] ;
int nume = 0 ;
int head[Max] ;
int vis[Max] ;
int num ;
int dis[Max] ;
int f[Max] ;
int ans[Max * 10] ;
void add(int s ,int e, int l)
{
ed[num].e = e ;
ed[num].l = l ;
ed[num].next = head[s] ;
head[s] = num ++ ;
}
void adde(int s,int e,int l )
{
ee[nume].e = e ;
ee[nume].next = head1[s] ;
ee[nume].l = l ;
head1[s] = nume ++ ;
}
int aaa ;
void init(int n )
{
mem(head,-1);
mem(head1 ,-1) ;
nume = 0 ;
mem(vis,0) ;