比赛 20160415 评测结果 WAAAAWWWWW
题目名称 能量网络 最终得分 40
用户昵称 mikumikumi 运行时间 0.138 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2016-04-15 10:30:41
显示代码纯文本
#include<cstdio>
#include<set>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int SIZEN=1010;
int N,M;
set<pair<int,int>,greater<pair<int,int> > > s[SIZEN];
int A[SIZEN],B[SIZEN];
int sa[SIZEN],mx=0,id;
void calc(int x)
{
	set<pair<int,int>,greater<pair<int,int> > >::iterator it,en;
	it=s[x].begin();
	pair<int,int> P=*it;
	it++;
	if(it==s[x].end()) return;
	pair<int,int> Po=*it;
	sa[P.second]+=P.first-Po.first;
}
void make_sa()
{
	memset(sa,0,sizeof(sa));
	for(int i=1;i<=N;i++) calc(i);
}
void sa_d()
{
	mx=0;
	for(int i=1;i<=N;i++)
	{
		sa[i]-=B[i];
		if(sa[i]>mx) mx=sa[i],id=i;
	}
}
void read()
{
	scanf("%d%d",&N,&M);
	for(int i=1;i<=N;i++) scanf("%d",&A[i]);
	for(int i=1;i<=N;i++) scanf("%d",&B[i]);
	for(int i=1;i<=N;i++) s[i].insert(make_pair(0,0));
	int fr,to;
	for(int i=1;i<=M;i++)
	{
		scanf("%d%d",&fr,&to);
		s[fr].insert(make_pair(A[to],to));
	}
	make_sa();
	sa_d();
}
void Era(int id)
{
	set<pair<int,int>,greater<pair<int,int> > >::iterator it;
	for(int i=1;i<=N;i++)
	{
		it=s[i].lower_bound(make_pair(A[id],id));
		pair<int,int> P=*it;
		if(P.first==A[id]&&P.second==id) s[i].erase(it);
	}
}
void work()
{
	int ans=0;
	for(int i=1;i<=N;i++)
	{
		if(mx<=0) break;
		ans+=B[id];
		Era(id);
		A[id]=0;
		make_sa();
		sa_d();
		//for(int j=1;j<=N;j++) cout<<sa[i]<<" ";
		//cout<<endl;
	}
	make_sa();
	for(int i=1;i<=N;i++) ans+=sa[i];
	printf("%d\n",ans);
}
int main()
{
	freopen("energynet.in","r",stdin);
	freopen("energynet.out","w",stdout);
	read();
	work();
	return 0;
}