标签:
问题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4022
map<int,<multiset<int> >通过嵌套实现一对多
1 #include<stdio.h> 2 #include<map> 3 #include<set> 4 const int MAXN = 100010; 5 using namespace std; 6 int main(){ 7 map<int,multiset<int> >xx,yy; 8 int n, m; 9 int x, y; 10 while(scanf("%d %d",&n,&m)){ 11 for( int i = 0; i < n; ++i){ 12 scanf("%d %d",&x,&y); 13 xx[x].insert(y); 14 yy[y].insert(x); 15 } 16 for( int i = 0; i < m; ++i){ 17 scanf("%d %d",&x,&y); 18 if(x){//删除y=y的点 19 printf("%d\n",yy[y].size()); 20 multiset<int>::iterator it = yy[y].begin(); 21 for(;it!=yy[y].end();++it) 22 xx[*it].erase(y); 23 yy[y].clear(); 24 } 25 else{//删除x=y的点 26 printf("%d\n",xx[y].size()); 27 multiset<int>::iterator it = xx[y].begin(); 28 for(;it!=xx[y].end();++it) 29 yy[*it].erase(y); 30 xx[y].clear(); 31 } 32 } 33 if( !n && !m ) 34 break; 35 else 36 printf("\n"); 37 } 38 }
标签:
原文地址:http://www.cnblogs.com/blueprintf/p/4705579.html