P1576
#include <bits/stdc++.h>
using namespace std;
typedef long double ld;
int n,m,x,y,z,A,B;
bool vis[2010];
vector<pair<int, ld>> g[2010];
ld dis[2010];
struct Node {
int data;
ld dis;
friend bool operator < (Node a, Node b) {
return a.dis < b.dis;
}
};
void dijkstra(int s) {
priority_queue<Node> q;
dis[s] = 1.0;
q.push({s, 1.0});
while (!q.empty()) {
Node top = q.top();
q.pop();
int data = top.data;
if (vis[data])
continue;
vis[data] = 1;
for (int i = 0; i < g[data].size(); i++) {
int v = g[data][i].first;
ld w = g[data][i].second;
if (dis[data] * w > dis[v]) {
dis[v] = dis[data] * w;
q.push({v, dis[v]});
}
}
}
}
int main() {
memset(dis, -0x3f, sizeof(dis));
cin>>n>>m;
for (int i = 1; i <= m; i++) {
cin>>x>>y>>z;
g[x].push_back(make_pair(y,1-z*1.0/100));
g[y].push_back(make_pair(x,1-z*1.0/100));
}
cin>>A>>B;
dijkstra(A);
printf("%.8Lf",100.0/dis[B]);
}
P2951
#include <bits/stdc++.h>
using namespace std;
int n, m, s = 1, u, v, cnt = 0, minn = 0x3f3f3f3f, dis[50010], x = 1, maxn = 0;
bool vis[50010];
vector<pair<int,int>> g[50010];
struct Node {
int data, dis;
friend bool operator < (Node n1, Node n2) {
return n1.dis > n2.dis;
}
};
void dijkstra() {
priority_queue<Node> q;
dis[s] = 0;
q.push({s, 0});
while (!q.empty()) {
int data = q.top().data;
q.pop();
if (vis[data])
continue;
vis[data] = 1;
for (int i = 0; i < (int)(g[data].size()); i++) {
int nv = g[data][i].first;
if (dis[data] + 1 < dis[nv]) {
dis[nv] = dis[data] + 1;
q.push({nv, dis[nv]});
}
}
}
}
int main() {
memset(dis, 0x3f, sizeof(dis));
cin>>n>>m;
for (int i = 1; i <= m; i++) {
scanf("%d%d", &u, &v);
g[u].push_back(make_pair(v, 1));
g[v].push_back(make_pair(u, 1));
}
dijkstra();
for (int i = 1; i <= n; i++) {
if (dis[i] > maxn) {
x = i;
maxn = dis[i];
}
}
for (int i = 1; i <= n; i++) {
if (dis[i] == maxn)
cnt++;
}
cout<<x<<" "<<maxn<<" "<<cnt;
}
P1807
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, m, s = 1, u, v, w, dis[1600];
bool vis[1600];
vector<pair<ll, ll>> g[1600];
queue<int> q;
void spfa() {
for (int i = 0; i <= n; i++)
dis[i] = -0x3f3f3f3f;
dis[1] = 0;
q.push(1);
vis[1] = 1;
while (!q.empty()) {
int u = q.front();
q.pop();
vis[u] = 0;
for (int i = 0; i < g[u].size(); i++) {
int v = g[u][i].first, w = g[u][i].second;
if (dis[u] + w > dis[v]) {
dis[v] = dis[u] + w;
if (!vis[v]) {
q.push(v);
vis[v] = 1;
}
}
}
}
}
int main() {
cin>>n>>m;
for (ll i = 1; i <= m; i++) {
cin>>u>>v>>w;
g[u].push_back({v, w});
}
spfa();
if (dis[n] == -0x3f3f3f3f)
cout<<-1;
else{
cout<<dis[n];
}
}
P2419
#include <bits/stdc++.h>
using namespace std;
int n,m,a,b, cnt = 0;
bool dp[110][110];
int main() {
cin>>n>>m;
memset(dp, 0, sizeof(dp));
for (int i=1; i<=m; i++) {
cin>>a>>b;
dp[a][b]=1;
}
for (int k=1;k<=n;k++){
for (int i=1;i<=n;i++){
for (int j=1;j<= n;j++){
dp[i][j] |= dp[i][k] & dp[k][j];
}
}
}
for (int i=1;i<=n;i++){
int sum = 0;
for (int j=1;j<=n;j++){
if (dp[i][j]||dp[j][i]){
sum++;
}
}
if (sum==n-1){
cnt++;
}
}
cout<<cnt;
}
P4306
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
ll cnt = 0;
char c;
bitset<2010> dp[2010];
int main() {
cin>>n;
for (int i = 1; i <= n; i++)
dp[i][i] = 1;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
cin >> c;
if (c == '1')
dp[i].set(j);
}
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++)
if (dp[i][k])
dp[i] |= dp[k];
}
for (int i = 1; i <= n; i++)
cnt += dp[i].count();
cout<<cnt;
}