标签:include blog names src std image sort 难度 size
在 n * mn?m 的网格上有一些点。在第 ii 行第 jj 列放置摄像头可以观察到所有满足 x = i, y \geq jx=i,y≥j 或x \geq i, y = jx≥i,y=j的点。求最少需要放多少个摄像头才能观察到所有给定的点,注意摄像头必须放在点上,且要保证任意一个摄像头均不能观察到另一个摄像头。保证输入中的点不会重复。
输入格式:
第一行包含一个整数 TT,表示数据组数。每组数据的格式如下:
第一行包含三个正整数 n, m, qn,m,q,表示网格的大小和给定点的个数。
接下来 qq 行,每行两个整数 x_i, y_ixi?,yi? ,表示第 ii 个点的坐标。
输出格式:
对每组数据输出一行,表示最少放置摄像头的点数,如果无解输出-1。
1 2 4 4 1 1 2 1 2 3 2 4
2
1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<map> 7 #include<set> 8 #include<queue> 9 #include<vector> 10 #define INF 0x7f7f7f7f 11 #define pii pair<int,int> 12 #define ll long long 13 #define MAXN 100005 14 using namespace std; 15 16 int read(){ 17 int x=0,f=1;char ch=getchar(); 18 while(ch<‘0‘||ch>‘9‘){if(‘-‘==ch)f=-1;ch=getchar();} 19 while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} 20 return x*f; 21 } 22 int n; 23 pii a[MAXN]; 24 int H[MAXN],L[MAXN]; 25 void solve(){ 26 memset(H,0,sizeof(H)); 27 memset(L,0,sizeof(L)); 28 int X=read(),Y=read(); 29 n=read(); 30 for(int i=1;i<=n;i++){ 31 a[i]=make_pair(read(),read()); 32 } 33 sort(a+1,a+n+1); 34 int ans=0; 35 for(int i=1;i<=n;i++){ 36 if(H[a[i].first]||L[a[i].second]){ 37 continue; 38 } 39 ans++; 40 H[a[i].first]=1; 41 L[a[i].second]=1; 42 } 43 printf("%d\n",ans); 44 } 45 int main() 46 { 47 // freopen("data.in","r",stdin); 48 int T=read(); 49 while(T--){ 50 solve(); 51 } 52 return 0; 53 }
标签:include blog names src std image sort 难度 size
原文地址:http://www.cnblogs.com/w-h-h/p/7747129.html