#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Max_len 100005
typedef struct node{
long adjvex;
struct node *next;
long length;
}edgenode;
typedef struct{
int num;
edgenode *link;
}vexnode;
typedef struct{
edgenode *front,*rear;
}linkqueue;
long pre_index[Max_len];
int EMPTY(linkqueue *q){
if(q->front==q->rear) return 1;
else return 0;
}
void ENQUEUEQ(linkqueue *q,long x){
q->rear->next=(edgenode*)malloc(sizeof(edgenode));
q->rear=q->rear->next;
q->rear->adjvex=x;
q->rear->next=NULL;
}
long DEQUEUEQ(linkqueue *q){
long temp;
edgenode *s;
if(EMPTY(q)) return -1;
else{
s=q->front->next;
if(s->next==NULL){
q->front->next=NULL;
q->rear=q->front;
}
else q->front->next=s->next;
temp=s->adjvex;
return temp;
}
}
void quick_sort(long x[],long l,long u){
if(l>=u) return;
long t=x[l];
long i=l;
long j=u+1;
long temp;
while(1){
do{i++;}while(i<=u&&x[i]<t);
do{j--;}while(x[j]>t);
if(i>j)break;
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
temp=x[l];
x[l]=x[j];
x[j]=temp;
quick_sort(x,l,j-1);
quick_sort(x,j+1,u);
}
struct edge{
long fromvex,endvex;
long length;
};
void quick_sort_2(edge x[],int l,int u){
if(l>=u) return;
long t=x[l].length;
int i=l;
int j=u+1;
edge temp;
while(1){
do{i++;}while(i<=u&&x[i].length<t);
do{j--;}while(x[j].length>t);
if(i>j)break;
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
temp=x[l];
x[l]=x[j];
x[j]=temp;
quick_sort_2(x,l,j-1);
quick_sort_2(x,j+1,u);
}
int main(){
int m,T;
int case_count=1;
scanf("%d",&T);
while(T--){
printf("Case #%d:\n",case_count);
case_count++;
vexnode ga[Max_len];
long triangle[Max_len];
int sign[Max_len];
edge data[Max_len];
int G[Max_len];
long i,j,k,n,l,i1;
scanf("%ld",&n);
edgenode *s;
for(i=0;i<=n;i++) {ga[i].link=NULL;ga[i].num=0;}
for(i=0;i<=n;i++) {sign[i]=0;G[i]=i;}
for(i=0;i<n-1;i++){
scanf("%ld%ld%ld",&data[i].fromvex,&data[i].endvex,&data[i].length);
}
quick_sort_2(data,0,n-2);
j=0;
i=0;
while(j<n-1){
k=data[i].fromvex;
l=data[i].endvex;
sign[i]=1;
if(G[k]==G[l]) sign[i]=2;
else{
s=(edgenode*)malloc(sizeof(edgenode));
s->adjvex=data[i].endvex;
s->next=ga[data[i].fromvex].link;
s->length=data[i].length;
ga[data[i].fromvex].link=s;
ga[data[i].fromvex].num++;
s=(edgenode*)malloc(sizeof(edgenode));
s->adjvex=data[i].fromvex;
s->next=ga[data[i].endvex].link;
s->length=data[i].length;
ga[data[i].endvex].link=s;
ga[data[i].endvex].num++;
j++;
for(i1=0;i1<n;i1++)
if(G[i]==G[l]) G[i]=G[k];
}
i++;
}
scanf("%d",&m);
int j1;
for(j1=0;j1<m;j1++){
long s1,t;
scanf("%ld%ld",&s1,&t);
linkqueue *q;
q=(linkqueue*)malloc(sizeof(linkqueue));
q->front=(edgenode*)malloc(sizeof(edgenode));
q->front->next=NULL;
q->rear=q->front;
//printf("%d\n",s1);
int visit[Max_len];
for(i=0;i<=n;i++) visit[i]=0;
visit[s1]=1;
ENQUEUEQ(q,s1);
int find_t=0;
for(i=0;i<=n;i++) pre_index[i]=-1;
while(!EMPTY(q)){
i=DEQUEUEQ(q);
int n_count=ga[i].num;
s=ga[i].link;
int q_count=0;
while(q_count<n_count){
if(visit[s->adjvex]!=1){
pre_index[s->adjvex]=i;
//printf("%d->%d\n",i,s->adjvex);
if(s->adjvex==t){
find_t=1;
goto next_1;
}
visit[s->adjvex]=1;
ENQUEUEQ(q,s->adjvex);
}
s=s->next;
q_count++;
}
}
next_1: int find_triangle=0;
if(find_t){
long triangle_num=0;
long index=s->adjvex;
while(index!=s1){
s=ga[pre_index[index]].link;
int n_count=ga[pre_index[index]].num;
int q_count=0;
while(q_count<n_count){
if(s->adjvex==index) break;
else s=s->next;
q_count++;
}
triangle[triangle_num]=s->length;
//printf("%d\n",s->length);
triangle_num++;
index=pre_index[index];
}
if(triangle_num>2){
quick_sort(triangle,0,triangle_num-1);
for(i=0;i<triangle_num;i++)
for(j=i+1;j<triangle_num;j++)
for(k=j+1;k<triangle_num;k++){
if(triangle[k]<triangle[i]+triangle[j]){find_triangle=1;break;}
}
}
}
if(find_triangle) printf("Yes\n");
else printf("No\n");
}
}
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
ACM.algorithm.rar_GCD矩阵_匈牙利_区间匹配_最短路 三维_模板元
共30个文件
txt:30个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 184 浏览量
2022-09-14
20:45:42
上传
评论
收藏 18KB RAR 举报
温馨提示
各种算法模板(二分图最大匹配匈牙利算法、最小生成树prime和kruskal算法、Dijkstra算法、两点最短路径负权值边SPFA算法、图任意两点最短路径Floy算法、网络最大流SAP算法、网络最大流最小费用算法、乘法逆元gcd扩展求解算法、线段树区间划分统计算法、矩阵n次方分治法求解、gcd算法、整数划分问题、函数最小点问题、十进制转ACM算法、素数筛选法和欧拉函数求解、快模算法、字符串匹配KMP算法、字典全排列算法、快排、三维度排序、)
资源推荐
资源详情
资源评论
收起资源包目录
ACM.algorithm.rar (30个子文件)
ACM经典算法
kruskal最小生成树算法计算图的最小消耗.txt 4KB
最小生成树:kruskal算法,复杂度和边有关.txt 1KB
求公因式gcd.txt 55B
图中任意两点最短路径Floyd算法.txt 966B
整数划分次数6=5+1.。。.txt 444B
矩阵n次方分治法.txt 2KB
快排.txt 327B
快速算fibonacci数——矩阵分治法.txt 1KB
两点最短路径负权值边SPFA算法.txt 1KB
二维度算最大子数组和.txt 682B
最小生成树:prime算法,复杂度和顶点有关.txt 1KB
素数筛选法和欧拉函数.txt 1KB
各矩形交集的面积.txt 1KB
十进制数转ACM数.txt 530B
网络最大流最小费用算法.txt 2KB
10.^100数相加.txt 797B
网络最大流SAP算法.txt 3KB
线段树,区间划分统计.txt 943B
两点最短路径Dijkstra算法.txt 1KB
n的d次方快速算法 分治法.txt 284B
乘法逆元求解算法.txt 531B
二分图最大匹配匈牙利算法.txt 1KB
大黄区域覆盖.txt 446B
因式分解60=2 2 3 5.txt 612B
字典全排列算法.txt 1KB
找函数最小点.txt 1KB
字符串匹配KMP算法.txt 2KB
计算大数aXb中各数字的数量,输出出现次数最多的数字.txt 887B
三个维度进行排序.txt 1KB
quick_mod.txt 209B
共 30 条
- 1
资源评论
四散
- 粉丝: 67
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功