第一行兩個整數 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.智者知過就改,愚者固執...