problem 2194 星系碰撞
據**,大約在100億年後,獅子座星系將與銀河系發生碰撞,兩個星系的碰撞將會合併兩個星系,但是沒有2個星球會相撞。現在某科學家得到兩個星系合併後的結果,一些二維平面上的點,但是不知道那些星球屬於銀河系,已知如果兩個星球屬於同乙個星系,那麼他們之間的距離大於5光年,這邊的距離指的是歐幾里得距離,即(x1,y1)與(x2,y2)的距離為sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))。現在想請你幫忙把合併後的結果分成2個集合,乙個屬於銀河系,乙個屬於獅子座星系,由於集合劃分的方案可能有多種,現在想知道最多有多少個星球可能屬於銀河系。(可以所有星球都屬於銀河系)
例如:如下圖有6個點,你可以有以下4中劃分, }; , }; , }; , } ,那麼可以採用第一種劃分 都屬於銀河系,答案為4.
包含多組資料每組資料輸入第一行 乙個整數n 表示星球個數(1<=n<=50000),接下去n 行 每行2個整數 x和y 表示星球的座標(1<=x,y<=500000),沒有重合的點。
輸出一行乙個整數表示最多有多少個星球屬於銀河系。如果沒辦法進行劃分那麼輸出-1。
61 39 111 75 713 54 4
4
#include #include #include #include #include #include #include #include #include #include #include #define inf 100000000
using namespace std;
struct node
};node a[50005];
vectorvec[50005];
int cx[50005];
int cy[50005];
int visit[50005];
int n;
int path(int u)
} }return 0;
}int color[50005];
int flag;
int maxmatch(int u)
que.push(v);
}else
}}
} int cc = va.size();
int res = 0;
for(int i = 0;i < cc;i++)
} return res;
}int d(int i,int j)
int main()
sort(a,a+n);
for(int i = 0;i < n;i++)
}}
int tm = 0;
memset(cx,-1,sizeof(cx));
memset(cy,-1,sizeof(cy));
memset(color,-1,sizeof(color));
flag = 0;
for(int i = 0;i < n && !flag;i++)
} if(flag)
else
} return 0;
}
樹的最大獨立集
include include includeusing namespace std ifstream fin c data19.in struct node int data int c int gc struct node parent struct node left struct node ...
樹的最大獨立集
題意 對於一棵有n個結點的無根樹,選出盡量多的結點,使得任何兩個結點均不相鄰 稱為最大獨立集 sol 樹形dp 由於每個點只由其兒子或者孫子決定 二者的最大值 所以我們可以深搜一遍,回溯的時候用當前節點更新其父親以及父親的父親 因為此時該節點的值已經被我們計算出來了 這種由已知貢獻給未知的方法稱為刷...
hdu 2768 最大獨立集
建圖很巧妙嗎,把每個孩子拆點,將有矛盾的兩個孩子之間連一條邊,當然還有反向邊,求出最大匹配 2 以為前面拆點且有反向邊所以求出最大匹配要除以2,然後用總人數減去即可 include include include define inf 0x3f3f3f3f define bug printf her...