首页 > 代码库 > HDU 4941 Magical Forest

HDU 4941 Magical Forest

题意:

  10^8*10^8个点图上,有一些点及其点值,会进行一些换行换列操作。

  查询其新图上某点值。

思路:

  用map存当前行/列指向原图的哪行/列

  map<pair>存原来图上点值

 

学到map储存二维的用法。倒是一个方便所在。

 

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <utility>#include <stack>#include <queue>#include <map>#include <deque>#define max(x,y) ((x)>(y)?(x):(y))#define min(x,y) ((x)<(y)?(x):(y))using namespace std;map<pair<int,int>,int> mapp;map<int,int> xx;//lie xmap<int,int> yy;//hang yint tt,t,n,m,k,x,y,c,q,a,b;int main(){    scanf("%d",&tt);    for(int j=1; j<=tt; j++)    {        xx.clear();        yy.clear();        mapp.clear();        printf("Case #%d:\n",j);        scanf("%d%d%d",&n,&m,&k);        for(int i=1; i<=k; i++)        {            scanf("%d%d%d",&x,&y,&c);            xx[x]=x;            yy[y]=y;            mapp[make_pair(x,y)]=c;        }        scanf("%d",&t);        while(t--)        {            scanf("%d%d%d",&q,&a,&b);            switch(q){                case 1:                         if(xx.find(a)!=xx.end() && xx.find(b)!=xx.end())                        {                            int tmp=xx[a]; xx[a]=xx[b]; xx[b]=tmp;                        }                    break;                case 2:                        if(yy.find(a)!=yy.end() && yy.find(b)!=yy.end())                        {                            int tmp=yy[a]; yy[a]=yy[b]; yy[b]=tmp;                        }                    break;                case 3:                    printf("%d\n",mapp[make_pair(xx[a],yy[b])]);                    break;            }        }    }    return 0;}
View Code