QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#188556 | #6894. Circuit | neko_nyaa | AC ✓ | 1271ms | 5280kb | C++14 | 2.3kb | 2023-09-25 23:54:42 | 2023-09-25 23:54:43 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int M = 998244353;
const int INF = 1e18;
void solve()
{
int n, m;
cin >> n >> m;
vector<vector<int>> adj(n, vector<int>(n, INF));
while (m--)
{
int u, v, w;
cin >> u >> v >> w;
u--, v--;
adj[u][v] = w;
}
int mincyclen = INF, cntmncyc = 0;
for (int st = 0; st < n; st++)
{
vector<int> dist(n, INF);
vector<int> cnt(n);
dist[st] = 0;
cnt[st] = 1;
vector<bool> vis(n);
for (int _ = 0; _ < n - st; _++)
{
int pick = st;
for (int i = st; i < n; i++)
{
if (vis[i] < vis[pick] || (!vis[i] && dist[i] < dist[pick]))
{
pick = i;
}
}
vis[pick] = 1;
for (int i = st; i < n; i++)
{
if (dist[pick] + adj[pick][i] < dist[i])
{
dist[i] = dist[pick] + adj[pick][i];
cnt[i] = cnt[pick];
}
else if (dist[pick] + adj[pick][i] == dist[i])
{
cnt[i] += cnt[pick];
cnt[i] %= M;
}
}
}
int cyclen = INF, cntcyc = 0;
for (int i = st + 1; i < n; i++)
{
if (dist[i] + adj[i][st] < cyclen)
{
cyclen = dist[i] + adj[i][st];
cntcyc = cnt[i];
}
else if (dist[i] + adj[i][st] == cyclen)
{
cntcyc += cnt[i];
cntcyc %= M;
}
}
if (cyclen < mincyclen)
{
mincyclen = cyclen;
cntmncyc = cntcyc;
}
else if (cyclen == mincyclen)
{
cntmncyc += cntcyc;
cntmncyc %= M;
}
}
if (mincyclen >= INF)
{
cout << "-1 -1\n";
}
else
{
cout << mincyclen << ' ' << cntmncyc << '\n';
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
while (t--)
{
solve();
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 1271ms
memory: 5280kb
input:
13 3 4 1 2 4 2 1 3 2 3 2 3 1 1 10 12 1 2 1 2 3 1 3 4 1 4 1 1 4 5 1 5 6 1 6 7 1 7 4 1 3 8 1 8 9 1 9 10 1 10 3 1 2 1 1 2 1 12 20 1 2 3 2 1 3 1 3 2 3 2 1 1 4 1 4 5 1 5 2 1 1 6 1 6 2 2 1 7 1 7 2 2 1 8 1 8 2 2 1 9 1 9 2 2 2 10 1 10 1 2 2 11 1 11 12 1 12 1 1 500 249500 1 2 1 1 3 2 1 4 3 1 5 4 1 6 5 1 7 6 ...
output:
7 2 4 3 -1 -1 6 21 500 616118143 1002500000 124750 566 124750 2 124750 -1 -1 500098704 2 8500 207839182 116655401 5046 500000000000 1
result:
ok 13 lines