社区讨论
我是妹子(只要你信),不是刚学oi的蒟蒻求助
P1841[JSOI2007] 重要的城市参与者 14已保存回复 19
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 19 条
- 当前快照
- 1 份
- 快照标识符
- @mi6zejwp
- 此快照首次捕获于
- 2025/11/20 13:19 4 个月前
- 此快照最后确认于
- 2025/11/20 15:45 4 个月前
为啥WA了两个点QAQ
CPP// luogu-judger-enable-o2
// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
#define MAXN 205
#define LL long long
#define mo 19260817
#define stO 1438273
#define orz 19491001
LL a[MAXN][MAXN],c[MAXN][MAXN];
LL f[MAXN][MAXN];
LL g[MAXN][MAXN];
LL h[MAXN][MAXN];
LL n,m;
bool p[MAXN];
void rd()
{
memset(a,0x3f,sizeof(a));
scanf("%lld%lld",&n,&m);
for(int i = 1; i <= n; i ++)
{
a[i][i] = 0;
f[i][i] = 1;
}
for(int i = 1; i <= m; i ++) {
LL x,y,l;
scanf("%lld%lld%lld",&x,&y,&l);
if(a[x][y] == l)
{
f[x][y] ++;
g[x][y] ++;
}
if(a[x][y] > l)
{
f[x][y] = 1;
g[x][y] = 1;
}
if(a[y][x] == l)
{
f[y][x] ++;
g[y][x] ++;
}
if(a[y][x] > l)
{
f[y][x] = 1;
g[y][x] = 1;
}
a[x][y] = min(a[x][y],l);
a[y][x] = min(a[y][x],l);
}
}
int main() {
rd();
/*) for(int i = 1; i <= n; i ++)
{
for(int j = 1; j <= n; j ++)
cout<<f[i][j]<<" ";
cout<<"\n";
}
cout<<"\n";
for(int i = 1; i <= n; i ++)
{
for(int j = 1; j <= n; j ++)
printf("%11d",a[i][j]);
cout<<"\n";
}
cout<<"\n";
cout<<"\n";*/
for(int k = 1; k <= n; k ++)
{
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
if(i != j && i != k && j != k)
{
if(a[i][k] + a[k][j] == a[i][j])
f[i][j] = (f[i][j] + f[i][k] * f[k][j])%mo;
if(a[i][k] + a[k][j] == a[i][j])
g[i][j] = (g[i][j] + g[i][k] * g[k][j])%orz;
if(a[i][k] + a[k][j] < a[i][j])
{
f[i][j] = 1;
g[i][j] = 1;
}
a[i][j] = min(a[i][j],a[i][k]+a[k][j]);
}
/*for(int i = 1; i <= n; i ++)
{
for(int j = 1; j <= n; j ++)
cout<<f[i][j]<<" ";
cout<<"\n";
}
cout<<"\n";
for(int i = 1; i <= n; i ++)
{
for(int j = 1; j <= n; j ++)
printf("%11d",a[i][j]);
cout<<"\n";
}
cout<<"\n";
cout<<"\n";*/
}
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
for(int k = 1; k <= n; k ++)
if(i != j && i != k && j != k)
if(f[i][k] * f[k][j]%mo == f[i][j] &&g[i][k] * g[k][j]%orz == g[i][j] && a[i][k] + a[k][j] == a[i][j])
{
// cout<<i<<" "<<j<<" "<<k<<"?\n";
p[k] = 1;
}
bool fl = 1;
for(int i = 1; i <= n; i ++)
if(p[i])
{
cout<<i<<" ";
fl = 0;
}
if(fl)
{
cout<<"No important cities.";
}
//for(int i = 1; i <= n; i ++)
// for(int j = 1; j <= n; j ++)
// cout<<i<<" "<<j<<" "<<f[i][j]<<"\n";
return 0;
}
/*
4 4
1 2 1
2 3 1
4 1 2
4 3 2
*/
回复
共 19 条回复,欢迎继续交流。
正在加载回复...