洛谷八連測2017R5
阿新 • • 發佈:2017-10-28
def tdi http 大小 radi psu sizeof math return
貪心
傳送門
題目描述
題目難度不一定按照題目順序遞增
在 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: 復制1 2 4 4 1 1 2 1 2 3 2 4輸出樣例#1: 復制
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 }
洛谷八連測2017R5