[usaco mar07] 奶牛交通
農場中,由於奶牛數量的迅速增長,通往奶牛宿舍的道路也出現了嚴重的交通擁堵問題.fj打算找出最忙碌的道路來重點整治.
這個牧區包括乙個由m (1 ≤ m ≤ 50,000)條單行道路(有向)組成的網路,以及 n (1 ≤ n ≤ 5,000)個交叉路口(編號為1..n),每一條道路連線兩個不同的交叉路口.奶牛宿舍位於第n個路口.每一條道路都由編號較小的路口通向編號較大的路 口.這樣就可以避免網路中出現環.顯而易見,所有道路都通向奶牛宿舍.而兩個交叉路口可能由不止一條邊連線.
在準備睡覺的時候,所有奶牛都從他們各自所在的交叉路口走向奶牛宿舍,奶牛只會在入度為0的路口,且所有入度為0的路口都會有奶牛.
幫助fj找出最忙碌的道路,即計算所有路徑中通過某條道路的最大次數.答案保證可以用32位整數儲存.
輸入格式:
輸出格式:
樣例輸入:
7 7樣例輸出1 33 4
3 54 6
2 35 6
6 7
4樣例說明:
1 4通向奶牛宿舍的所有路徑:\ / \
3 6 -- 7
/ \ /
2 5
1 3 4 6 71 3 5 6 7
2 3 4 6 7
2 3 5 6 7
通過某一條路的次數就是通過某一條路兩端點路徑條數的乘積
f[i]代表從乙個入度為0的點到f[i]的路徑條數
g[i]代表從n到i點的路徑條數
f[i]=sum 存在邊(j,i)
g[i]=sum 存在邊(i,j)
f[k]=1 k為入度為0的點
g[n]=1;
ans=max 存在邊(a,b)
1 #include 2 #include 3**4const
int maxn=5010;5
6int
n,m;78
intf[maxn],g[maxn];910
struct
node
14 node(int to,int
next):to(to),next(next) {}
15};
16 node e[maxn*10],r[maxn*10
];17
18int
head[maxn],head[maxn],tot;
1920 inline void read(int&x)
2627 inline int max(int a,int b)
2829 inline void add(int x,int
y) 35
36int
hh()
46 g[n]=1;47
for(register int i=1;i<=n;++i)
48if(!head[i]) f[i]=1;49
50for(register int i=1;i<=n;++i)
51for(register int j=head[i];j;j=e[j].next)
52 f[e[j].to]+=f[i];
5354
for(register int i=n;i>=1;--i)
55for(register int j=head[i];j;j=r[j].next)
56 g[r[j].to]+=g[i];
5758
int ans=-1;59
for(register int i=1;i<=n;++i)
60for(register int j=head[i];j;j=e[j].next)
61 ans=max(ans,f[i]*g[e[j].to]);
62 printf("
%d\n
",ans);
63return0;
64}6566
int sb=hh();
67int main(int argc,char**argv)
字元0 數字0和 0
binoct dechex 縮寫 字元 解釋0000 000000 00nut null 空字元00110000 6048300 字元0ascii碼值 0 表示空字元,空字元就是平時所說的 0 字元 0 ascii碼值為 48,如 012 字串中的 0 表示字元 0 數字 0,所說的數字 0,就是平...
C語言 0 和0和 0
共同點 都是字元 不同點 0 對應的ascii碼是0,是ascii碼表中的第乙個字元,即空字元 判斷乙個字串是否結束的標誌就是看是否遇到 0 0 對應的ascii碼是48,48對應的十六進製制數就是0x30。0 是字串常量,字串常量是由一對雙引號括起的字串行。字串常量可以含乙個或多個字元。0 是字元...
徹底搞定0x0d和0x0a
我只在arm linux c和vc 下做了試驗,請大家在接觸其它語言環境下,小心推廣,不行就自己動手做試驗,最可靠。在arm linux c和vc 下回車換行的意義如下。回車 cr ascii碼 r 十六進製制,0x0d,回車的作用只是移動游標至該行的起始位置 換行 lf ascii碼 n 十六進製...