#include<iostream>//map函数大大
#include<cstring>//大int是能放1e9的。。。学到了 ,A了
#include<map>
#include<algorithm>
#define maxn 100010
using namespace std;
struct node
{
int x;int y;int c;
}l[maxn];
map<int ,map<int,int> > fmap;//定义格式要学会
map<int,int>hashx;map<int,int>hashy;
int lianx[maxn],liany[maxn],A,B;
bool cmpx(node a,node b)
{
return a.x<b.x;
}
bool cmpy(node a,node b)
{
return a.y<b.y;
}
int main()
{
int CAS;
scanf("%d",&CAS);
int n,m,k,mapx,mapy;
for(int i=1;i<=CAS;i++)
{
scanf("%d%d%d",&n,&m,&k);
printf("Case #%d:\n",i);//这么输出顺序对么?? 尼玛这个输出顺序真的可以唉。。逗我
for(int i=1;i<=k;i++)
scanf("%d%d%d",&l[i].x,&l[i].y,&l[i].c);
hashx.clear();hashy.clear();fmap.clear();mapx=0;mapy=0;//初始化是这样咩
sort(l+1,l+k+1,cmpx);
for(int i=1;i<=k;i++)if(!hashx[l[i].x])hashx[l[i].x]=++mapx;
sort(l+1,l+k+1,cmpy);
for(int i=1;i<=k;i++)
{
if(!hashy[l[i].y])hashy[l[i].y]=++mapy;
fmap[hashx[l[i].x]][hashy[l[i].y]]=l[i].c;//建图的时候就是用序号存的,太叼了
}
for(int i=1;i<=mapx;i++) lianx[i]=i;
for(int i=1;i<=mapy;i++) liany[i]=i;
int T,P;
scanf("%d",&T);
for(int i=1;i<=T;i++)
{
scanf("%d%d%d",&P,&A,&B);
if(P==1) swap(lianx[hashx[A]],lianx[hashx[B]]);
if(P==2) swap(liany[hashy[A]],liany[hashy[B]]);
if(P==3) //都这样直接输出真的可以吗。。。
{
int X=hashx[A];int Y=hashy[B];
if(X&&Y)//注意这句,表示这一位置没苹果,
printf("%d\n",fmap[lianx[X]][liany[Y]]);
else
printf("0\n");
}
}
}
return 0;
}
HDU4941
最新推荐文章于 2014-08-21 20:17:55 发布