QOJ.ac
QOJ
ID | 提交记录ID | 题目 | Hacker | Owner | 结果 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|
#1608 | #934441 | #3496. Damaged Roads | nb_jzy | nb_jzy | Success! | 2025-03-20 20:01:54 | 2025-03-20 20:01:54 |
详细
Extra Test:
Wrong Answer
time: 0ms
memory: 13020kb
input:
4 6 1 2 2 2 3 2 1 3 2 1 4 5 2 4 5 3 4 5
output:
3
result:
wrong answer 1st numbers differ - expected: '2', found: '3'
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#934441 | #3496. Damaged Roads | nb_jzy | WA | 32ms | 83080kb | C++14 | 2.3kb | 2025-03-14 19:35:41 | 2025-03-20 20:02:26 |
answer
#include<bits/stdc++.h>
using namespace std;
const int maxn=605;
int dis[maxn][maxn],f[maxn],n,m,U[maxn],V[maxn],W[maxn],d[maxn],cnt[maxn];
vector<int> raw;
vector<int> e[maxn][maxn];
struct nodee{
int fi,se,id;
};
vector<nodee> g[maxn];
bool vis[maxn],ismerge[maxn];
int getfa(int x){
if(f[x]==x){
return x;
}
return f[x]=getfa(f[x]);
}
struct node{
int x,y,w,id;
bool operator < (node aa) const{
return w<aa.w;
}
}b[maxn];
void dfs(int u,int fa,int root){
for(auto v:g[u]){
if(v.fi!=fa){
e[root][v.fi]=e[root][u];
if(e[root][v.fi].empty()||v.se>W[e[root][v.fi][0]]){
e[root][v.fi].clear();
e[root][v.fi].push_back(v.id);
}
else if(v.se==W[e[root][v.fi][0]]){
e[root][v.fi].push_back(v.id);
}
dfs(v.fi,u,root);
}
}
}
int solve(int x){
memset(vis,0,sizeof vis),memset(d,0,sizeof d);
int s1=0,s2=0;
for(int i=1;i<=n-x;i++){
int maxx=0;
for(int j=1;j<=n;j++){
if(!ismerge[j]&&!vis[j]&&d[j]>=d[maxx]){
maxx=j;
}
}
if(i==n-x){
s2=maxx;
break;
}
else if(i==n-x-1){
s1=maxx;
}
vis[maxx]=1;
for(int j=1;j<=n;j++){
d[j]+=dis[j][maxx];
}
}
ismerge[s1]=1;
dis[s1][s2]=dis[s2][s1]=0;
for(int i=1;i<=n;i++){
dis[i][s2]+=dis[i][s1];
dis[s2][i]+=dis[s1][i];
}
return d[s2];
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
f[i]=i;
}
for(int i=1;i<=m;i++){
cin>>U[i]>>V[i]>>W[i];
b[i].x=U[i],b[i].y=V[i],b[i].w=W[i],b[i].id=i;
}
sort(b+1,b+m+1);
for(int i=1;i<=m;i++){
int xx=getfa(b[i].x),yy=getfa(b[i].y);
if(xx!=yy){
raw.push_back(b[i].id);
f[xx]=yy;vis[b[i].id]=1;
g[b[i].x].push_back({b[i].y,b[i].w,b[i].id}),g[b[i].y].push_back({b[i].x,b[i].w,b[i].id});
}
}
for(int i=1;i<=n;i++){
dfs(i,0,i);
}
for(int i=1;i<=m;i++){
if(!vis[i]){
if(W[i]==W[e[U[i]][V[i]][0]]){
for(auto v:e[U[i]][V[i]])cnt[v]++;
vis[i]=1;
}
}
}
for(auto v:raw){
if(cnt[v]==0){
cout<<"1";
return 0;
}
}
for(int i=1;i<=m;i++){
if(vis[i]){
dis[U[i]][V[i]]++,dis[V[i]][U[i]]++;
}
}
int ans=m+1;
for(int i=1;i<n;i++){
ans=min(ans,solve(i-1));
}
cout<<ans;
return 0;
}
/*
2 5
1 2 1
1 2 1
1 2 1
1 2 1
1 2 1
*/