标签:起点 string cst oid using include 方法 cto scan
0 : inf ;
que.push(st) ;vis[st] = 1;
while(que.size())
{
int u = que.front();que.pop() ;
vis[u] = 0 ;
for(int i = head[u];i != -1 ;i = edge[i].next)
{
int v = edge[i].v ;
if(dis[u] + edge[i].w < dis[v])
{
dis[v] = dis[u] + edge[i].w ;
if(!vis[v])
{
que.push(v) ;
vis[v] = 1;
}
}
}
}
}
bool bfs()
{
memset(dis , -1 , sizeof(dis)) ;
dis[st] = 0 ;
queue<int> que ;
que.push(st) ;
while(que.size())
{
int u = que.front();que.pop() ;
for(int i = head[u];i != -1 ;i = edge[i].next)
{
int v = edge[i].v ;
if(dis[v] < 0 && edge[i].w > 0)
{
dis[v] = dis[u] + 1 ;
que.push(v) ;
}
}
}
if(dis[en] > 0)return true ;
return false ;
}
int dfs(int u , int mx)
{
if(u == en)return mx ;
int ans = 0 , a ;
for(int i = head[u];i != -1 ;i = edge[i].next)
{
int v = edge[i].v ;
if(dis[v] == dis[u] + 1 && edge[i].w > 0 && (a = dfs(v , min(mx , edge[i].w))))
{
mx -= a ;
ans += a ;
edge[i].w -= a ;
edge[i^1].w += a ;
if(!mx)break;
}
}
if(!ans)dis[u] = -1 ;
return ans ;
}
int main()
{
//freopen("in.txt" , "r" , stdin) ;
int t ;
scanf("%d" , &t) ;
while(t--)
{
scanf("%d%d" , &n , &m);
memset(head , -1 , sizeof(head)) ;
nedge = 0 ;len = 0 ;
while(m--)
{
int u , v , w ;
scanf("%d%d%d" , &u , &v , &w) ;
if(u != v)
{
addedge(u , v , w) ;
x[len] = u , y[len] = v ,z[len++] = w ;
}
}
scanf("%d%d" , &st , &en) ;
spfa() ;
memset(head , -1 , sizeof(head)) ;
nedge = 0 ;
for(int i = 0;i < len;i++)
if(dis[x[i]] + z[i] == dis[y[i]])
{
addedge(x[i] , y[i] , 1) ;
addedge(y[i] , x[i] , 0) ;
}
int ans = 0 ;
int res ;
while(bfs())
while(res = dfs(st , inf))
ans += res ;
printf("%d\n" , ans) ;
}
return 0 ;
}
hdu3461Marriage Match IV 最短路+最大流
标签:起点 string cst oid using include 方法 cto scan
原文地址:http://www.cnblogs.com/zhchoutai/p/7236705.html