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 }

浙公网安备 33010602011771号