hdu 2485
//이 문제는 최소 비용 흐름으로도 풀 수 있으며, 잠시 후에 코드를 보충합니다
//최대 스트림 코드:
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
#define inf 1000000
int bdis[55],hdis[55],vis[110];
int map[55][55],dis[55],n,cap[110][110];
void bfs(int start)
{
int i;
queue <int> que;
for(i=1;i<=n;i++)
dis[i]=inf;
que.push(start);
dis[start]=0;
while(!que.empty())
{
int u=que.front();
que.pop();
for(i=1;i<=n;i++)
{
if(map[u][i]&&dis[u]+1<dis[i])
{
dis[i]=dis[u]+1;
que.push(i);
}
}
}
}
int pre[110];
int maxflow(int start,int end)
{
int i,res=0,Min;
while(1)
{
queue <int> que;
memset(vis,0,sizeof(vis));
que.push(start);
vis[start]=1;
while(!que.empty())
{
int u=que.front();
que.pop();
if(vis[end])break;
for(i=start;i<=end;i++)
{
if(!vis[i]&&cap[u][i]>0)
{
vis[i]=1;
pre[i]=u;
que.push(i);
}
}
}
if(!vis[end])break;
Min=inf;
for(i=end;i!=start;i=pre[i])
{
if(cap[pre[i]][i]<Min)Min=cap[pre[i]][i];
}
res+=Min;
for(i=end;i!=start;i=pre[i])
{
cap[pre[i]][i]-=Min;
cap[i][pre[i]]+=Min;
}
}
return res;
}
int mp[55][55];
int main()
{
int m,k,i,j,a,b;
while(scanf("%d%d%d",&n,&m,&k),n+m+k)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]=mp[i][j]=0;
for(i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
mp[a][b]=1;
map[b][a]=1;
map[a][b]=1;
}
bfs(1);
for(i=1;i<=n;i++)bdis[i]=dis[i];
bfs(n);
for(i=1;i<=n;i++)hdis[i]=dis[i];
for(i=1;i<=2*n;i++)
for(j=1;j<=2*n;j++)
cap[i][j]=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
if(mp[i][j])
cap[i+n][j]=inf;
if(bdis[i]+hdis[i]<=k)
cap[i][i+n]=1;
}
cap[1][1+n]=inf;
cap[n][n+n]=inf;
printf("%d
",maxflow(1,n+n));
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.