奇怪的错误
查看原帖
奇怪的错误
139496
Taystered楼主2022/9/5 22:07

将emplace_front改为emplace_back就会从100分到0分

请问是怎么回事呢?

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5,LogN=15;
struct Edge 
{
	int v,w;
	Edge(int V=0,int W=0) {v=V,w=W;}
};
int dfn[N],low[N],size[N<<1],dis[N<<1],val[N],f[N<<1][LogN+5],g[N<<1][LogN+5],dep[N<<1],Stack[N],n,m,q,top,id,dfstime;
list <Edge> e[N],resE[N<<1];
int cirmin(int x,int y) {return min(x,y-x);}
void tarjan(int x,int dad)
{
	dfn[x]=low[x]=++dfstime;
	Stack[++top]=x;
	for (auto now:e[x])
	{
		int y=now.v;
		if (!dfn[y])
		{
			tarjan(y,x);
			val[y]=now.w;
			low[x]=min(low[x],low[y]);
			if (dfn[x]==low[y])
			{
				resE[x].emplace_back(Edge(++id,0));
				size[id]=val[x];
				for (;Stack[top]^x;--top)
				{
					int k=Stack[top];
					resE[id].emplace_back(Edge(k,dis[k]=size[id])),
					size[id]+=val[k];
				}
				for (auto &Now:resE[id])
					Now.w=cirmin(Now.w,size[id]);
			}
			else if (dfn[x]<low[y]) resE[x].emplace_back(Edge(y,now.w)),--top;
		}
		else if (y^dad) val[y]=now.w,low[x]=min(low[x],dfn[y]);
	}
}
void dfs(int x,int dad)
{
	dep[x]=dep[dad]+1;
	for (int i=1;i<=LogN;++i)
		f[x][i]=f[f[x][i-1]][i-1],
		g[x][i]=g[x][i-1]+g[f[x][i-1]][i-1];
	for (auto now:resE[x])
	{
		int y=now.v;
		if (y==dad) continue;
		f[y][0]=x,g[y][0]=now.w;
		dfs(y,x);
	}
}
pair <int,int> LCA(int &x,int &y)
{
	int res=0;
	if (dep[x]<dep[y]) swap(x,y);
	for (int i=LogN;~i;--i) if (dep[f[x][i]]>=dep[y]) res+=g[x][i],x=f[x][i];
	for (int i=LogN;~i;--i) if (f[x][i]^f[y][i]) res+=g[x][i]+g[y][i],x=f[x][i],y=f[y][i];
	return {x^y?f[x][0]:x,res};
}
int main()
{
	scanf("%d%d%d",&n,&m,&q),id=n;
	for (int i=1,u,v,w;i<=m;++i)
		scanf("%d%d%d",&u,&v,&w),
		e[u].emplace_front(Edge(v,w)),
		e[v].emplace_front(Edge(u,w));
	for (int i=1;i<=n;++i)
		if (!dfn[i]) tarjan(i,0);
	dfs(1,0);
	for (int x,y;q--;)
	{
		scanf("%d%d",&x,&y);
		auto res=LCA(x,y);
		int r=res.first;
		if (r>n) printf("%d\n",res.second+cirmin(abs(dis[x]-dis[y]),size[r]));
		if (r<=n) printf("%d\n",res.second+(x^y?g[x][0]+g[y][0]:0));
	}
}
2022/9/5 22:07
加载中...