比赛 |
20140414 |
评测结果 |
WAWWWWWWWW |
题目名称 |
奶牛的十项全能 |
最终得分 |
10 |
用户昵称 |
Miku_lyt |
运行时间 |
0.003 s |
代码语言 |
C++ |
内存使用 |
0.51 MiB |
提交时间 |
2014-04-14 11:24:12 |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
struct edge{
int x,y,l,c;
int next;
};
edge v[10000];
int head[50];
int k[50],p[50],a[50];
int s[50][50];
int d[50];
int last[50];
int f[50];
int n,m;
int x;
int tot=1;
int st,ed;
int sum=0;
int ans=0;
void add(int x,int y,int l,int c){
tot++;
v[tot].x=x;
v[tot].y=y;
v[tot].l=l;
v[tot].c=c;
v[tot].next=head[x];
head[x]=tot;
}
bool bfs(){
for (int i=st;i<=ed;i++){
d[i]=-0x3f3f3f3f;
}
queue<int> q;
q.push(st);
d[st]=0;
int now=0;
while (!q.empty()){
now=q.front();
q.pop();
f[now]=0;
for (int x=head[now];x;x=v[x].next){
if (v[x].l>0&&d[v[x].y]<d[now]+v[x].c){
d[v[x].y]=d[now]+v[x].c;
last[v[x].y]=x;
if (!f[v[x].y]){
f[v[x].y]=1;
q.push(v[x].y);
}
}
}
}
if (d[ed]!=-0x3f3f3f3f){
return 1;
}
return 0;
}
void updata(){
int flow=0x3f3f3f3f;
for (int x=last[ed];x;x=last[v[x^1].y]){
flow=min(flow,v[x].l);
}
for (int x=last[ed];x;x=last[v[x^1].y]){
v[x].l-=flow;
v[x^1].l+=flow;
}
ans+=flow*d[ed];
}
int main(){
freopen("deca.in","r",stdin);
freopen("deca.out","w",stdout);
scanf("%d%d",&n,&m);
st=0;
ed=n+n+1;
sum=n+n+1;
for (int i=1;i<=m;i++){
scanf("%d%d%d",&k[i],&p[i],&a[i]);
}
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
scanf("%d",&x);
add(i,j+n,1,x);
add(j+n,i,0,-x);
}
}
for (int i=1;i<=n;i++){
add(st,i,1,0);
add(i,st,0,0);
add(i+n,ed,1,0);
add(ed,i+n,0,0);
}
while (bfs()){
updata();
}
printf("%d\n",ans);
return 0;
}