请希望有人可以将这段代码转换为C#代码 [英] Please I Hope Someone Can Convert This Piece Of Code To C# Code
本文介绍了请希望有人可以将这段代码转换为C#代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
#define MAX_V 50000
#define LOG2_MAXV 16
int N;
vector<int> L[MAX_V],W[MAX_V];
int Q[MAX_V],head,tail;
bool visited[MAX_V];
int P[MAX_V][LOG2_MAXV],level[MAX_V],dist[MAX_V][LOG2_MAXV];
void bfs(){
head = 0; tail = 0;
memset(visited,false,sizeof(visited));
P[0][0] = -1;
level[0] = 0;
dist[0][0] = -1;
Q[0] = 0; tail = 1;
visited[0] = true;
while(head<tail){>
int pos = Q[head];
++head;
for(int i = L[pos].size()-1;i>=0;--i){
int next = L[pos][i];
if(!visited[next]){
P[next][0] = pos;
level[next] = level[pos]+1;
dist[next][0] = W[pos][i];
Q[tail] = next; ++tail;
visited[next] = true;
}
}
}
}
void lca_init(){
bfs();
for(int j = 1;(1<<j)<n;++j){>
for(int i = 0;i<n;++i){>
if(P[i][j-1]!=-1){
P[i][j] = P[P[i][j-1]][j-1];
dist[i][j] = dist[i][j-1]+dist[P[i][j-1]][j-1];
}
}
}
}
int LCA(int p, int q){
if(level[p]<level[q])>
int log = 0;
while((1<<log)<=level[p]) ++log;
--log;
int ans = 0;
for(int i = log;i>=0;--i){
if(level[p]-(1<<i)>=level[q]){
ans += dist[p][i];
p = P[p][i];
}
}
if(p==q) return ans;
for(int i = log;i>=0;--i){
if(P[p][i]!=-1 && P[p][i]!=P[q][i]){
ans += dist[p][i]+dist[q][i];
p = P[p][i];
q = P[q][i];
}
}
ans += dist[p][0]+dist[q][0];
return ans;
}
int main(){
scanf("%d",&N);
for(int i = 1,u,v,w;i<n;++i){>
scanf("%d %d %d",&u,&v,&w);
L[u].push_back(v);
W[u].push_back(w);
L[v].push_back(u);
W[v].push_back(w);
}
int Q;
scanf("%d",&Q);
lca_init();
for(int q = 0,u,v;q<q;++q){>
scanf("%d %d",&u,&v);
printf("%d\n",LCA(u,v));
}
return 0;
}
推荐答案
有人必须是你。这不是用于按需编写代码的站点。
That someone would have to be YOU. This isn't a site for getting code written on-demand.
这篇关于请希望有人可以将这段代码转换为C#代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文