1. 程式人生 > >05:Cave Cows 1 洞穴裏的牛之一

05:Cave Cows 1 洞穴裏的牛之一

algorithm 希望 getch pre 限制 一個 ++ 超過 mes

總時間限制:
10000ms
單個測試點時間限制:
1000ms
內存限制:
262144kB
描述
很少人知道其實奶牛非常喜歡到洞穴裏面去探險。 洞窟裏有N(1≤N≤100)個洞室,由M(1≤M≤1000)條雙向通道連接著它們.每對洞室間 至多只有一條雙向通道.有K(1≤K≤14)個洞室,裏面放有1捆幹草.牛吃1捆幹草,體重指數就會增加1. 貪吃的貝茜要到洞窟裏面探險.她希望能吃盡量多的幹草,但每條通道有一個寬度閾值,如果體重指數超過相應的閾值,貝茜就會被卡祝她從洞窟1出發,體重指數為0.在洞裏溜達一圈後,她要返回洞窟1. 那她最多能吃多少捆幹草呢?註意,貝茜經過一個洞室,不一定非要吃掉裏面的幹草.

輸入
第1行輸入N,M,K,之後K行每行一個整數,表示在這個洞室放有一捆幹草;接下來M行每行三個整數,表示一條雙向通道的起點終點和寬度閾值.
輸出
最多能吃掉的幹草數.
樣例輸入
6 7 5
1
2
3
4
5
1 2 3
3 6 2
6 2 10
2 4 1
5 1 1
4 5 1
1 6 1
樣例輸出
4
來源
USACO 2004 Open Orange
思路:貪心,把每個稻草的閾值都排一個序,能吃的就吃
註意幾個細節:
1、要特判一號洞穴有艹的情況
2.、最後要寫>
 1 #include<iostream>
 2 #include<cstdio>
 3
#include<cstring> 4 #include<algorithm> 5 #include<queue> 6 using namespace std; 7 const int MAXN=4001; 8 const int maxn=0x3f; 9 void read(int &n) 10 { 11 char c=+;int x=0;bool flag=0; 12 while(c<0||c>9){c=getchar();if(c==-)flag=1;} 13 while(c>=
0&&c<=9) 14 x=(x<<1)+(x<<3)+c-48,c=getchar(); 15 flag==1?n=-x:n=x; 16 } 17 int n,m,k; 18 struct node 19 { 20 int have; 21 int need; 22 int pos; 23 }a[MAXN]; 24 int map[MAXN][MAXN]; 25 int dis[MAXN][MAXN]; 26 int comp(const node &a,const node &b) 27 { 28 if(a.have==b.have) 29 return a.need<b.need; 30 else 31 return a.have>b.have; 32 } 33 int main() 34 { 35 read(n);read(m);read(k); 36 int num=k; 37 for(int i=1;i<=k;i++) 38 { 39 int p; 40 read(p); 41 a[p].have=1; 42 a[i].pos=i; 43 } 44 memset(map,maxn,sizeof(map)); 45 for(int i=1;i<=m;i++) 46 { 47 int x,y,z; 48 read(x);read(y);read(z); 49 map[x][y]=z; 50 map[y][x]=z; 51 } 52 53 for(int i=1;i<=n;i++) 54 map[i][i]=0; 55 56 for(int k=1;k<=n;k++) 57 for(int i=1;i<=n;i++) 58 for(int j=1;j<=n;j++) 59 if(map[i][j]<maxn) 60 map[i][j]=max(map[i][j],min(map[i][k],map[k][j])); 61 else 62 map[i][j]=min(map[i][k],map[k][j]); 63 64 for(int i=1;i<=n;i++) 65 if(a[i].have) 66 a[i].need=map[1][i]; 67 68 69 sort(a+1,a+n+1,comp); 70 71 int now=0; 72 int flag=0; 73 for(int i=1;i<=num;i++) 74 { 75 // if(a[i].have==0)break; 76 if(a[i].have&&a[i].pos==1) 77 { 78 flag=1; 79 continue; 80 } 81 if(a[i].need>now) 82 now++; 83 84 } 85 if(flag==1) 86 now++; 87 printf("%d",now); 88 return 0; 89 }

05:Cave Cows 1 洞穴裏的牛之一