愚者指名自己的辯護人 紀中2046 最短路

2021-07-22 16:58:06 字數 1888 閱讀 5162

第一行兩個整數 n,m,表示點數和邊數。

接下來一行 n 個整數,第 i 個正整數表示 pi。

接下來 m 行,每行兩個整數 u,v,表示有一條無向邊連線了 u 和 v。

輸出 n 行,每行為乙個 0 或 1,意義如題目描述所示。

列舉去掉哪些點會對結果產生影響,就是必定經過的點

精度是個問題需要注意

spfa是最快的,複雜度o(

nmk)

floyd是最簡單的,複雜度o(

n4)

這裡兩種都有打,floyd開o2快得飛起但仍然沒有spfa快

維包一生推,gosick**好!!!

#include 

#include

using

namespace

std;

double f[101][101],t[101][101];

int p[101],r[101],n,m;

__attribute__((optimize("o2")))

inline

double max(double x,double y)

__attribute__((optimize("o2")))

inline

void floyd(int v)

int main()

for (int i=1;i<=m;i++)

floyd(0);

double ans=f[1][n];

r[1]=1;

r[n]=1;

for (int v=2;vif (abs(ans-f[1][n])>0.000001||!f[1][n])

r[v]=1;

}for (int i=1;i<=n;i++)

printf("%d\n",r[i]);

return

0;}

#include 

#include

#include

#include

using

namespace

std;

struct edge

e[401];

int ls[401],r[101],p[101],n,m,maxe=0;

double d[101];

bool vis[101];

__attribute__((optimize("o2")))

inline

void add(int x,int y,double w)

; ls[x]=maxe;

}__attribute__((optimize("o2")))

inline

double spfa(int v)

}vis[now]=false;

}return d[n];

}int main()

for (int i=1;i<=m;i++)

double ans=spfa(0);

printf("1\n");

for (int i=2;idouble tmp=spfa(i);

if (abs(tmp-ans)>0.0000001||abs(tmp-0)<=0.0000001)

printf("1\n");

else

printf("0\n");

}printf("1\n");

return

0;}

2046 愚者指名自己的辯護人

輸入 第一行兩個整數 n,m,表示點數和邊數。接下來一行 n 個整數,第 i 個正整數表示 pi。接下來 m 行,每行兩個整數 u,v,表示有一條無向邊連線了 u 和 v。輸出 輸出 n 行,每行為乙個 0 或 1,意義如題目描述所示。樣例輸入 7 81 50 49 10 90 90 1 1 21 ...

愚者與智者的48個差距

第一章 學會尊重他人 1 智者善於傾聽,愚者沒有耐心 2 智者了解別人的心思,愚者表示自己的需要 3 智者記住別人的名字,愚者希望名字被記住 4 智者滿臉微笑,愚者冷若冰霜 第二章 不做無意義的爭辯 5 智者讓別人逐步說 是 愚者會引起更多爭論 6 智者聰慧幽默,愚者呆板無趣 7 智者知過就改,愚者...

愚者與智者的48個差距

第一章學會尊重他人 1.智者善於傾聽,愚者沒有耐心 2.智者了解別人的心思,愚者表示自己的需要 3.智者記住別人的名字,愚者希望名字被記住 4.智者滿臉微笑,愚者冷若冰霜 第二章不做無意義的爭辯 5.智者讓別人逐步說 是 愚者會引起更多爭論 6.智者聰慧幽默,愚者呆板無趣 7.智者知過就改,愚者固執...