次小生成樹板題。
先求出最小生成樹。(因為題目沒有說清楚邊的條數,所以我使用了prim)
然後在最小生成樹上預處理出每兩點間的樹邊的最大值。(每個點bfs一邊就好了。)
然後列舉沒加進去的邊,每次替掉所在環上除自己外的最大值,取min就是答案了。
複雜度o(n^2)。
**:
#include#include#include#include#include#include#include#includeusing namespace std;
#define rep(i,j,k) for(i=j;i<=k;++i)
#define per(i,j,k) for(i=j;i>=k;--i)
#define g getchar()
#define ll long long
#define pii pair#define mkp make_pair
#define x first
#define y second
#define n 505
#define nn 250005
#define inf 1061109567
int n,m;struct edgee[nn];
vectorv[n];bool vis[n];int min[n],pos[n],ans;
int he[n],ne[n<<1],to[n<<1],w[n<<1],tot;
int q[n],max[n][n],ans2;bool inq[n];
void read(int &x)
void add(int x,int y,int z)
void bfs(int x)
memset(min,63,sizeof min);
vis[x=1]=1;tot=1;
rep(i,2,n)
if(i<=n)
printf("cost: %d\n",ans);
if(m
P1070 道路遊戲
小新正在玩乙個簡單的電腦遊戲。遊戲中有一條環形馬路,馬路上有 n 個機械人工廠,兩個相鄰機械人工廠之間由一小段馬路連線。小新以某個機械人工廠為起點,按順時針順序依次將這 n 個機械人工廠編號為1 n,因為馬路是環形的,所以第 n 個機械人工廠和第 1 個機械人工廠是由一段馬路連線在一起的。小新將連線...
洛谷P1070 道路遊戲
小新正在玩乙個簡單的電腦遊戲。遊戲中有一條環形馬路,馬路上有 n 個機械人工廠,兩個相鄰機械人工廠之間由一小段馬路連線。小新以某個機械人工廠為起點,按順時針順序依次將這 n 個機械人工廠編號為1 n,因為馬路是環形的,所以第 n 個機械人工廠和第 1 個機械人工廠是由一段馬路連線在一起的。小新將連線...
vijos1070 新年趣事
描述格式 輸入格式 第一行兩個數n 2 n 500 m,分別表示國家的城市數和可以修建鐵路的城市有多少對。接下來m行,每行三個正整數ai,bi,ci,表示城市ai和bi之間可以修建鐵路,費用為ci。輸出格式 第一行 cost 乙個整數,表示最小費用。若不存在,輸出 1 第二行 cost 乙個整數,表...