hdu 1501


题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1051

题目分析:额,这题卡了,就是因为一直在纠结调用函数cmp的时候l,w该怎么样排序;题目中所给的意思就是:

                   先按l小得排序,要是l一样的话,返回w小的,最重要的一点就是,l排序了之后,要看w,就是后一个的w要比前面一个的w要大。(就是卡在这里)

后来看了别人的代码,自己分析了一下,终于知道人家是怎么弄清这一尘关系的了。

                 最后说一点就是:关于输出,通俗的说就是有几个结点,就输出几,比如(4,9),(5,2),(2,1),(3,5),(1,4)排好序后就是:

(1,4),(3,5),(4,9),    (2,1),(5,2);两个结点,输出2

AC代码:

 

#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>      
#include<iostream>
#include<algorithm>
using namespace std;
struct tt{
	int l,w;
}s[5005];
bool visit[5005];
bool cmp(const tt &a,const tt &b){
	if(a.l!=b.l)
		return a.l<b.l;
	return	a.w<b.w;
}
int main(){
	int T,i,j,n;
	cin>>T;
	while(T--){
		cin>>n;
		for(i=0;i<n;i++)
			cin>>s[i].l>>s[i].w;
		sort(s,s+n,cmp);
		memset(visit,false,sizeof(visit));
		int ans=0;
		for(i=0;i<n;i++){
			if(visit[i]) continue;
			visit[i]=true;
			ans++;
			int wmax=s[i].w;
			for(j=i+1;j<n;j++)
				if(visit[j]==false&&s[j].w>=wmax){
					visit[j]=true;
					wmax=s[j].w;
				}
		}
		cout<<ans<<endl;
	}
	return 0;
}


你可能感兴趣的:(hdu 1501)