HDU 4305 Contest 1
感觉是有很多细节要处理的。尤其是求逆元后的运算,应该是存在超范围的情况的。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
#define MOD 10007
#define N 305
using namespace std; struct point{
int x,y;
}p[N];
int D[N][N],G[N][N],C[N][N];
bool vis[N];
int dist(point a,point b){
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
} void getc(int n){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
C[i][j]=D[i][j]-G[i][j];
}
} bool bfs(int n){
int c=0;
memset(vis,false,sizeof(vis));
queue<int>que;
que.push(1);
vis[1]=true;
while(!que.empty()){
c++;
int tmp=que.front();
que.pop();
for(int i=1;i<=n;i++){
if(G[tmp][i]==1&&!vis[i]){
que.push(i);
vis[i]=true;
}
}
}
if(c==n) return true;
else return false;
} void exgcd (int a, int b, int &x, int &y)
{
if (b == 0)
{
x = 1, y = 0;
return ;
}
exgcd (b, a%b, x, y);
int tp = x;
x = y;
y = tp - a/b*y;
} int work(int n){
int x,y;
int sgn=0;
for(int i=1;i<n;i++)
for(int j=1;j<n;j++)
C[i][j]=(C[i][j]%MOD+MOD)%MOD;
for(int i=1;i<n;i++){
if(C[i][i]==0){
int j;
for(j=i+1;j<n;j++)
if(C[j][i]!=0)
break;
if(j>=n) return -1;
for(int k=1;k<n;k++)
swap(C[i][k],C[j][k]);
sgn++;
}
exgcd(C[i][i],MOD,x,y);
x=(x%MOD+MOD)%MOD;
for(int j=i+1;j<n;j++){
for(int k=i+1;k<n;k++){
C[j][k]=((C[j][k]-(((C[i][k]*x)%MOD)*C[j][i])%MOD)%MOD+MOD)%MOD;
}
}
}
int ans=1;
for(int i=1;i<n;i++)
ans=(ans*(C[i][i]))%MOD;
if(sgn&1)return (MOD-ans)%MOD;
return ans;
} int main(){
int T,n,r;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&r);
for(int i=1;i<=n;i++)
scanf("%d%d",&p[i].x,&p[i].y);
memset(D,0,sizeof(D));
memset(G,0,sizeof(G));
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(i!=j){
int tp=dist(p[i],p[j]);
if(tp<=r*r){
bool flag=true;
for(int k=1;k<=n;k++){
if(k!=i&&k!=j&&dist(p[i],p[k])<=dist(p[i],p[j])&&dist(p[j],p[k])<=tp
&&(p[i].y-p[k].y)*(p[k].x-p[j].x)==(p[k].y-p[j].y)*(p[i].x-p[k].x)){
flag=false;
break;
}
}
if(flag){
D[i][i]++;D[j][j]++;
G[i][j]=G[j][i]=1;
}
}
}
}
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++)
// cout<<D[i][j]<<' ';
// cout<<endl;
// }
getc(n);
if(!bfs(n)){
printf("-1\n");
}
else{
int ans=work(n);
printf("%d\n",ans);
}
}
return 0;
}
HDU 4305 Contest 1的更多相关文章
- HDU - 4305 - Lightning 生成树计数 + 叉积判断三点共线
HDU - 4305 题意: 比较裸的一道生成树计数问题,构造Krichhoof矩阵,求解行列式即可.但是这道题还有一个限制,就是给定的坐标中,两点连线中不能有其他的点,否则这两点就不能连接.枚举点, ...
- HDU 5045 Contest(状压DP)
Problem Description In the ACM International Collegiate Programming Contest, each team consist of th ...
- hdu - 5045 - Contest(国家压缩dp)
意甲冠军:N个人M通过主打歌有自己的期望,每个问题发送人玩.它不能超过随机播放的次数1,追求最大业绩预期 (1 ≤ N ≤ 10,1 ≤ M ≤ 1000). 主题链接:pid=5045" ...
- [ACM] hdu 5045 Contest (减少国家Dp)
Contest Problem Description In the ACM International Collegiate Programming Contest, each team consi ...
- HDU 4305 Lightning(计算几何,判断点在线段上,生成树计数)
Lightning Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 4305 生成树计数问题
Lightning Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU–5988-Coding Contest(最小费用最大流变形)
Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 【HDU 4305】Lightning(生成树计数)
Problem Description There are N robots standing on the ground (Don't know why. Don't know how). Sudd ...
- hdu 5045 Contest(状态压缩DP)
题解:我们使用一个二位数组dp[i][j]记录进行到第i个任务时,人组合为j时的最大和(这里的j我们用二进制的每位相应一个人). 详细见代码: #include <iostream> #i ...
随机推荐
- BA--空调系统一次泵和二次泵区别
通常来说,空调系统是按照满负荷设计的,但实际运行中,满负荷运行的 时间不足 3% ,空调设备绝大部分时间内在远低于额定负荷的情况下运转.在 部分负荷下,虽然冷水机组可以根据实际负荷调节相应的冷量输出, ...
- JavaWeb应用中的身份验证(声明式)——基于表单的身份认证
容器管理安全最普遍的类型建立在基于表单的身份验证方式上. 通过这样的方式,server自己主动将尚未验证的用户重定向到一个HTML表单.检查他们的username和password,决定他们属于哪个角 ...
- ES内存持续上升问题定位
https://discuss.elastic.co/t/memory-usage-of-the-machine-with-es-is-continuously-increasing/23537/ ...
- 【POJ 2828】Buy Tickets
[题目链接] http://poj.org/problem?id=2828 [算法] 离线用线段树维护序列即可 [代码] #include <algorithm> #include < ...
- Qt-窗口部件概念介绍
前言:包括基础窗口部件QWidget.对话框QDialog.QFrame类族 .按钮部件.行编辑器.数值设定框以及滑块部件. 一.基础窗口部件QWidget 窗口部件(Widget)是Qt中建立用户界 ...
- POJ 2446 匈牙利算法
题意: 思路: 二分图匹配... // by SiriusRen #include <cmath> #include <cstdio> #include <cstring ...
- HTML文档 html,html5,css,css3
HTML 各种标签及简单应用: http://www.w3school.com.cn 1 <p><p> 2 <br/> 3 <hr/>横线 4 < ...
- .NET中的异步操作及线程同步
执行异步操作 CLR使用了WIN的线程处理能力,但保留了与其分离的权利.某些时候CLR的线程与Win的线程不是完全的匹配. 线程的系统开销较大,应限制其数量. 创建:分配并初始化一线程内核对象,保留1 ...
- 迭代器与函数Python学习(四)
1.1 迭代器: 迭代的工具 1.1.1 什么是迭代: 指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果是下一次重复的初始值 while True: print('=====> ...
- JavaScript设计模式学习——builder pattern(建造者模式)
个人理解的应用场景 举个例子,比如想要创建各种类型的车的实例,车的类型有很多种,但创建每种类型车的接口定义可能是一样的,就用到了此模式 相关概念的通俗解释 上述例子中接口的定义叫builder 接口到 ...