poj3263 tallest cow

这个题有毒......

一开始看到,脑海里直接浮现出了拓扑排序。然后怎么想怎么不对。

仔细分析,就会发现这些条件给的一定不会重叠。重叠即违法。

但是我无法继续分析了。看书,书上TM居然说:

每次把条件之类的cow高度减1即可。

我TM......

细想之下,还真TM是的!

注意点:一个条件可能给出多次,要记录。

然后就....A了!

 1 // poj 3263
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5 const int N = 10010;
 6 int d[N];
 7 
 8 struct Edge {
 9     int u,v,nextEdge;
10 }edge[N];int top;
11 int point[N];
12 bool add(int x,int y){
13     for(int i=point[x];i;i=edge[i].nextEdge) {
14         if(edge[i].v==y)
15             return false;
16     }
17     top++;
18     edge[top].u=x;
19     edge[top].v=y;
20     edge[top].nextEdge=point[x];
21     point[x]=top;
22     return true;
23 }
24 
25 int main(){
26     int n,p,h,r;
27     scanf("%d%d%d%d",&n,&p,&h,&r);
28     d[1]=h;
29     for(int i=1;i<=r;i++) {
30         int x,y;
31         scanf("%d%d",&x,&y);
32         if(x>y) swap(x,y);
33         if(add(x,y)) {
34             d[x+1]--;
35             d[y]++;
36         }
37     }
38 
39     int temp=0;
40     for(int i=1;i<=n;i++){
41         temp+=d[i];
42         printf("%d\n",temp);
43     }
44 
45     return 0;
46 }
AC代码

 

posted @ 2018-05-06 15:46  garage  阅读(97)  评论(0)    收藏  举报