NOI 2018: 돌아 오 는 길
구체 적 인 사고: \ (\; \;; \) 크 루스 칼 재 구성 트 리재 구성 트 리 에 노드 하 나 를 새로 만 들 고 두 개의 연결 블록 을 새로운 점 의 아들 로 생각 합 니 다.
SPFA 가 끊 겼 다 니, 정말 통쾌 하 다. dij 얼마나 좋 은 데 AC 코드
#include
#include
#include
#include
#include
using namespace std;
int n,m,T,q,x,y,z,zz,k,s,v0,p0,lastans,v,p,nowans;
const int N=1000000,INF=1e9;
int dis[N],vis[N],f[N],fa[N],ans[N],out[N],FA[N][20],H[N];
vector son[N];
struct link
{
int top,fi[N],ne[N],la[N],to[N],l[N],h[N];
inline void clear()
{
top=0,memset(fi,0,sizeof fi),memset(ne,0,sizeof ne),memset(la,0,sizeof la),memset(to,0,sizeof to),memset(l,0,sizeof l),memset(h,0,sizeof h);
}
inline void add(int x,int y,int z,int H)
{
top++,to[top]=y,l[top]=z,h[top]=H;
if(fi[x]==0)fi[x]=top;else ne[la[x]]=top;
la[x]=top;
}
}L;
struct node
{
int id,dis;
bool operator < (const node &a) const {return a.dis < dis;}
};
priority_queue que;
inline void DIJKSTRA()
{
for(int i=1;i<=n;i++)dis[i]=INF,vis[i]=0;
dis[1]=0;while(!que.empty())que.pop();
node tmp;
tmp.id=1;tmp.dis=0;que.push(tmp);
while (!que.empty())
{
int now=que.top().id;
que.pop();
if (vis[now]) continue;
vis[now]=true;
for (int i=L.fi[now];i;i=L.ne[i])
{
if (!vis[L.to[i]]&&dis[L.to[i]]>dis[now]+L.l[i])
{
dis[L.to[i]]=dis[now]+L.l[i];
tmp.id=L.to[i];tmp.dis=dis[L.to[i]];
que.push(tmp);
}
}
}
}
struct E{int x,y,l,h;}e[N];
inline bool cmp(E a,E b){return a.h>b.h;}
inline int ASK(int x){if(fa[x]==x)return x;else return fa[x]=ASK(fa[x]);}
void dfs(int x)
{
for(int i=1;i<=19;i++)FA[x][i]=FA[FA[x][i-1]][i-1];
for(int i=0;i=0;i--)if(H[FA[now][i]]>p)now=FA[now][i];
lastans=ans[now];
printf("%d
",lastans);
}
}
return 0;
}
다음으로 전송:https://www.cnblogs.com/Orange-User/p/9362738.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.