最大流dinic算法

最大流dinic算法 求助
#include <iostream>
#include <vector>
#include <stdio.h>
#include <string.h>
#include <queue>
#define INF 1000000
using namespace std;
struct edge
{
int q,w,c,f;
edge()
{
q=w=c=f=0;
}
edge(int qq,int ww,int cc,int ff)
{
q=qq; w=ww; c=cc; f=ff;
}
};
vector<edge> a[205];
int d[205];
int con[205];
int ans=0,n;
int li[205][205];
int o[205],s,t;
void adde(int x,int y,int cc)
{
a[x].push_back(edge(x,y,cc,0));
li[x][y]=a[x].size()-1;
a[y].push_back(edge(y,x,0,0));
li[y][x]=a[y].size()-1;
}
bool bfs()
{
bool v[205];
queue<int> q;
memset(d,0,sizeof(d));
memset(v,0,sizeof(v));
q.push(s);
d[s]=0;
v[s]=1;
while (!q.empty())
{
int i=q.front(); q.pop();
for (int j=0;j<a[i].size();j++)
{
if (!v[a[i][j].w] && a[i][j].f<a[i][j].c)
{
v[a[i][j].w]=1;
d[a[i][j].w]=d[i]+1;
q.push(a[i][j].w);
}
}
}
return v[t];
}
int dfs(int x,int ag)
{
if (ag==0 || x==t) {return ag;}
int m=0;
for (int i=con[x];i<a[x].size();i++,con[x]++)
{
int j;
if (d[a[x][i].w]==d[x]+1 && (j=dfs(a[x][i].w,min(ag,a[x][i].c-a[x][i].f)))>0)
{
a[x][i].f+=j;
int y=a[x][i].w;
a[y][li[y][x]].f-=j;
ag-=j;
m+=j;
if (ag==0) {break;}
}
}
return m;
}
int main()
{
int tt,z;
scanf("%d",&tt);
for (z=1;z<=tt;z++)
{
int i,j,k,l,m;
scanf("%d %d",&n,&m);
s=1; t=n;
for (i=1;i<=n;i++) {a[i].clear();}
memset(li,0,sizeof(li));
ans=0;
for (i=1;i<=m;i++)
{
scanf("%d %d %d",&j,&k,&l);
adde(j,k,l);
}
while (bfs())
{
memset(con,0,sizeof(con));
ans+=dfs(s,INF);
}
printf("%d\n",ans);
}
}

dinic算法的模板题,为什么会错? 谢谢.
算法

------解决方案--------------------
如果是刚结束的那比赛题的话……那题是双向边。你要adde(j,k,l)再adde(k,j,l)……