HDU 2377 Bus Pass prime 의 사상 + spfa
생각: 폭력 을 생각 하기 시 작 했 습 니 다. 분명히 시간 이 허락 되 지 않 았 습 니 다. 그러면 여기 서 prime 알고리즘 을 사용 한 작은 사상 인 A, B 집합, A 집합 은 모든 점 에서 B 집합 까지 모든 점 에서 최소 치 를 low 배열 에 저장 합 니 다. 그러면 지금 은 버스 노선 을 A 집합 으로 보고 나머지 점 은 B 집합 으로 봐 야 합 니 다. 그러면 우 리 는 B 집합 중의 모든 점 을 찾 아야 합 니 다.A 집합 거리 (B 집합 에서 A 집합 거리: B 집합 중의 점 u 에서 A 집합 중의 모든 점 거리 중 거리 가 가장 큰 것) 에 이 르 러 이 거 리 를 업데이트 한 후 가장 작은 것 을 찾 으 면 된다.생각해 보면 납득 이 간다.
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#define inf 0x7fffffff
using namespace std;
const int nodes=10000;
const int edges=200000+500;
struct node
{
int v,next,w;
}e[edges];
int head[nodes],cnt,max_dis[nodes];
int nz,nr;
void Init()
{
memset(head,-1,sizeof(head));
cnt=0;
memset(max_dis,-1,sizeof(max_dis));
}
void add(int a,int b,int c)
{
e[cnt].v=b;
e[cnt].w=c;
e[cnt].next=head[a];
head[a]=cnt++;
}
void spfa(int s)
{
queue<int>q;
while(!q.empty()) q.pop();
int dis[nodes],vis[nodes];
for(int i=1;i<=9999;i++)
{
dis[i]=inf;
vis[i]=0;
}
vis[s]=1;
dis[s]=0;
if(max_dis[s]==-1)
max_dis[s]=0;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i+1;i=e[i].next)
{
int v=e[i].v;
if(dis[v]>dis[u]+e[i].w)
{
dis[v]=dis[u]+e[i].w;
if(max_dis[v]<dis[v])
max_dis[v]=dis[v];
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
}
}
int main()
{
int test;
scanf("%d",&test);
while(test--)
{
scanf("%d%d",&nz,&nr);
Init();
for(int i=1;i<=nz;i++)
{
int a,num;
scanf("%d%d",&a,&num);
while(num--)
{
int b;
scanf("%d",&b);
add(a,b,1);
add(b,a,1);
}
}
for(int i=1;i<=nr;i++)
{
int num;
scanf("%d",&num);
while(num--)
{
int a;
scanf("%d",&a);
spfa(a);
}
}
int pos,val=inf;
for(int i=1;i<=9999;i++)
{
if(max_dis[i]<val&&max_dis[i]!=-1)
{
val=max_dis[i];
pos=i;
}
}
printf("%d %d
",val+1,pos);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.