树网的核

找到任意一条直径,枚举直径上所有路径,找到每条路径上的偏心距,其中最小的偏心距就是答案,这条路径就是树网的核

O(n^{2})

#include
using namespace std;
#define MAXN 610
int n,k;

int cnt,first[MAXN],nxt[MAXN];
int u[MAXN],v[MAXN],w[MAXN];
void add(int a,int b,int c){
	++cnt;
	nxt[cnt]=first[a];first[a]=cnt;
	u[cnt]=a;v[cnt]=b;w[cnt]=c;
}

int st,mx;
void dfs(int cur,int fa,int val){
	if(mxk)return;
	vis2[cur]=true;
	
	ml=0;
	dfs4(cur,0,0);
	
	for(int i=first[cur];i;i=nxt[i]){
		int to=v[i];
		if(to==fa)continue;
		if(!vis[to])continue;
		
		dfs3(to,cur,length+w[i]);
	}
}

int ans=0x3f3f3f3f;
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i

 

你可能感兴趣的:(树网的核)