理解错题意了。。。写的很麻烦,而且900+卡过。。。

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <algorithm>
  5 #include <string>
  6 #include <cmath>
  7 using namespace std;
  8 #define eps 1e-6
  9 struct cir
 10 {
 11     int x,y,r;
 12 } p[1001];
 13 int flag[1001];
 14 int o[1001];
 15 int t1[1001],t2[1001];
 16 struct node
 17 {
 18     int u,v,next;
 19 } edge[1000000];
 20 int X,Y;
 21 int t,first[1001],dp[1001];
 22 void CL()
 23 {
 24     memset(first,-1,sizeof(first));
 25     t = 1;
 26 }
 27 double dis(int x1,int y1,int x2,int y2)
 28 {
 29     return sqrt((x1-x2)*(x1-x2)+(y2-y1)*(y2-y1)+0.0);
 30 }
 31 int judge(int key,int x,int y)
 32 {
 33     double temp;
 34     temp = dis(x,y,p[key].x,p[key].y);
 35     if(temp < p[key].r)
 36         return 1;
 37     else
 38         return 0;
 39 }
 40 int fun(int x,int y)
 41 {
 42     /*B包含A  他们都含有原点 不含有X Y  建边A->B
 43     A包含原点,B含有X Y 且A B不相交  建边A->B
 44     A B 都包含X Y,A包含B   建边 A -> B */
 45     double temp;
 46     temp = dis(p[x].x,p[x].y,p[y].x,p[y].y);
 47     if(temp <= p[x].r + p[y].r &&temp >= fabs(p[x].r-p[y].r*1.0))//相交相切
 48         return 0;
 49     if(t1[x]&&t1[y]&&p[x].r < p[y].r)
 50         return 1;
 51     else if(t1[x]&&t2[y])
 52         return 1;
 53     else if(t2[x]&&t2[y]&&p[x].r > p[y].r)
 54         return 1;
 55     else
 56         return 0;
 57 }
 58 void add(int u,int v)
 59 {
 60     edge[t].u = u;
 61     edge[t].v = v;
 62     edge[t].next = first[u];
 63     first[u] = t ++;
 64 }
 65 int dfs(int u)
 66 {
 67     int ans,i;
 68     if(dp[u] > 0)
 69         return dp[u];
 70     ans = 0;
 71     for(i = first[u]; i != -1; i = edge[i].next)
 72     {
 73         ans = max(dfs(edge[i].v),ans);
 74     }
 75     dp[u] = ans + 1;
 76     return dp[u];
 77 }
 78 int main()
 79 {
 80     int cas,i,j,n,num = 1,ans1;
 81     scanf("%d",&cas);
 82     while(cas--)
 83     {
 84         memset(flag,0,sizeof(flag));
 85         memset(o,0,sizeof(o));
 86         memset(dp,0,sizeof(dp));
 87         CL();
 88         scanf("%d%d%d",&n,&X,&Y);
 89         for(i = 1; i <= n; i ++)
 90         {
 91             scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].r);
 92         }
 93         for(i = 1; i <= n; i ++)
 94         {
 95             t1[i] = judge(i,X,Y);//标记了一下,卡过了。。
 96             t2[i] = judge(i,0,0);
 97             if(t1[i]&&t2[i])
 98                 flag[i] = 1;
 99             else if(!t1[i]&&!t2[i])
100                 flag[i] = 1;
101         }
102         for(i = 1; i <= n; i ++)
103         {
104             if(!flag[i])
105             {
106                 for(j = 1; j <= n; j ++)
107                 {
108                     if(i != j&&!flag[j])
109                     {
110                         if(fun(i,j))
111                         {
112                             add(i,j);
113                             o[j] ++;
114                         }
115                     }
116                 }
117             }
118         }
119         ans1 = 0;
120         for(i = 1; i <= n; i ++)
121         {
122             if(!flag[i]&&o[i] == 0)
123             {
124                 ans1 = max(dfs(i),ans1);
125             }
126         }
127         printf("Case %d: %d\n",num ++,ans1);
128     }
129     return 0;
130 }

转载于:https://www.cnblogs.com/naix-x/archive/2013/05/25/3099399.html

HDU 4562 守护雅典娜(DAG上的最长路)相关推荐

  1. HDU 4562 守护雅典娜(dp)

    守护雅典娜 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  2. hdu 4562 守护雅典娜(计算几何+dp)

    守护雅典娜 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  3. hdu 4562 守护雅典娜 (Simple Geometry + dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=4562 中文题. 这道题的做法是先筛选出那些能够起到分隔雅典娜和怪兽的圆,就是那些只包围雅典娜或者只包围怪兽的圆, ...

  4. HDU 4562 守护雅典娜(金山复赛第二场)

    题意是塔防建塔,要求建最多塔 然后符合的情况是: rt 红色是允许的,蓝色是不允许的 输入时选择红色的 然后dp1 ath的圈,再dp2 mon的圈,最后dp3这两种圈的总和 dp1和dp2中能增加的 ...

  5. HDU 4562 守护雅典娜(动态规划)

    答案分为三种只能只有包含雅典娜的塔,只有包含怪兽的塔,包含雅典娜和怪兽的塔的和. 使用dp可以分别计算包含雅典娜.怪兽的最厚塔层数,过程类似LIS.枚举这两种情况的塔数,求和计算第三种情况. #inc ...

  6. HDU 4562 守护雅典娜

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4562 题意:给出一个点p(X,Y)以及若干圆.从中选出尽可能多的圆满足:圆能且只能包含p或者原点中的一 ...

  7. nyoj 10 skiing(DAG上的最长路,备忘录方法)

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑 ...

  8. hdu4562 守护雅典娜 DP

    守护雅典娜 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  9. 杭电acm4562守护雅典娜 (dp+圆)

    守护雅典娜 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

最新文章

  1. 【JavaSE_07】Java中类和对象-封装特性
  2. 【tensorflow速成】Tensorflow图像分类从模型自定义到测试
  3. python 如何编写图像标定(标记)(annotation)画框程序?
  4. VTK:Shaders之BozoShader
  5. 枚举类 - Java面向对象编程
  6. Qt之QGraphicsView实战篇(很强大)
  7. 字节二面:优化 HTTPS 的手段,你知道几个?
  8. 巧用 PHP 数组函数 1
  9. 跟我学Spring Cloud(Finchley版)-21-Spring Cloud Config-配置属性加解密
  10. 预言:ALEXA工具条即将进行大规模升级(转)
  11. 最新ThinkPHP仿华为商城源码+带支付宝接口/在线支付
  12. Excel工作表丨使用Excel表格直接添加条码/二维码
  13. html鼠标悬停改变背景,html - 更改鼠标悬停行的背景颜色 - SO中文参考 - www.soinside.com...
  14. 酒店客房管理系统安排 Java项目 毕业设计项目不用愁
  15. 数据分析:新冠疫情实时数据爬取
  16. python公众号接口_用Python实现微信公众号API素材库图文消息抓取
  17. 99刀299刀 开发者账户 区别
  18. Java版Quest Soft Player
  19. 分页第一页用0还是1_洗脸用冷水还是热水好?这些错误只要犯1个,你的脸就白洗了!...
  20. python中英文字频率_python 统计英语文档词汇出现频率,以六级真题为例

热门文章

  1. linux内核开启ssh,linux开启ssh服务
  2. 【uniapp】真机调试
  3. Twinmotion 初学者教程
  4. Elasticsearch:如何实现短语建议 - phrase suggester
  5. 微信小程序:保持常亮
  6. zabbix监控服务器性能,使用zabbix监控apache性能
  7. 奇偶个数和数字特征值—程序设计入门C语言
  8. Vue使用html2Canvas导出pdf报Uncaught (in promise) Error: Element is not attached to a Document错误
  9. 利用dayjs格式化时间
  10. Scala 中的偏函数