求救20分
查看原帖
求救20分
362762
lzyzs楼主2023/9/26 12:07
#include <bits/stdc++.h>
#define xx xy[0]
#define yy xy[1]
using namespace std;
int ax,ay,m,n,o,p;
struct edge{
	int xy[2],w;
};
void getx(vector<edge> a,vector<edge> &h,int xy,int pos)
{
	h.clear();
	for(int i=0;i<a.size();i++)
	{
		if(a[i].xy[xy]==pos)
		{
			int k=h.size();
			h.push_back(edge{a[i].xy[1-xy],0,a[i].w});
		}
	}
}
int xc(vector<edge> a,vector<edge> b)
{
	int i=0,j=0,res=0;
	while(i<a.size()&&j<b.size())
	{
		if(a[i].xx==b[j].xx)
		{
			res+=a[i].w*b[j].w;
			i++,j++;
		}
		while(i<a.size()&&j<b.size()&&a[i].xx<b[j].xx)i++;
		while(i<a.size()&&j<b.size()&&a[i].xx>b[j].xx)j++;
	}
	return res;
}
void out(vector<edge> a)
{
	for(int i=0;i<a.size();i++) printf("%d %d %d\n",a[i].xy[0],a[i].xy[1],a[i].w);
	printf("\n");
}
void cf(vector<edge> a,vector<edge> b,vector<edge> c)
{
	vector<edge> ah,bl,cl;
	getx(a,ah,0,ax);
	getx(c,cl,1,ay);
	vector<edge> ab;
	for(int i=1;i<=o;i++)
	{
		getx(b,bl,1,i);
		int te=xc(ah,bl);
		if(!te) continue;
		ab.push_back(edge{i,0,te});
	}
	cout << xc(ab,cl) << endl;
}
int gt()
{
	char a,b;
	int res=0;
	a=getchar();
	if(a=='\n') return -1; 
	while(a!=' ')
	{
		res*=10;
		res+=a-'0';
		a=getchar();
	}
	return res;
}
void read(vector<edge> &a)
{
	char x;
	int te,y,w;
	do{
		te=gt();
		if(te==-1) return;
		cin >> y >> w;
		x=getchar();
		a.push_back(edge{te,y,w});
	}while(1);
}
int main()
{
	cin >> ax >> ay >> m >> n >> o >> p;
	char fw=getchar();
	vector<edge> a,b,c;
	read(a);
	read(b);
	read(c);
	cf(a,b,c);
	return 0;
 } 
2023/9/26 12:07
加载中...