P3623 [APIO2008]免費道路 WQS二分
題意:
分析:
手動給邊權賦值,轉化成 PP2619 [國家集訓隊2]Tree I
程式碼:
#include<bits/stdc++.h>
using namespace std;
namespace zzc
{
const int maxn = 2e4+5;
const int maxm = 100005;
const double eps = 1e-5;
int fa[maxn];
int n,m,need,tot,cnt;
bool vis[maxm];
struct edge
{
int frm,to,nxt,flag;
double val;
}e[maxm];
bool cmp(edge a,edge b)
{
if(a.val==b.val) return a.flag<b.flag;
return a.val<b.val;
}
int find(int u)
{
return fa[u]==u?u:fa[u]=find(fa[u]);
}
void init()
{
scanf("%d%d%d",&n,&m,&need);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&e[i].frm ,&e[i].to,&e[i].flag);
e[i].val=rand()%m;
}
}
void kruskal()
{
sort(e+1,e+m+1,cmp);
for(int i=1;cnt!=n-1;i++)
{
int fx=find(e[i].frm),fy=find(e[i].to);
if(fx!=fy)
{
vis[i]=true;
cnt++;
fa[fx]=fy;
if(e[i].flag==0) tot++;
}
}
}
void solve()
{
double l=-2e5+5,r=2e5+5;
while(r-l>=eps)
{
double mid=(l+r)/2.0;
for(int i=1;i<=m;i++)
{
if(!e[i].flag) e[i].val+=mid;
vis[i]=false;
}
for(int i=1;i<=n+1; i++) fa[i]=i;
cnt=0,tot=0;
kruskal();
if(tot>=need) l=mid+1;
else r=mid-1;
if(tot==need)
{
for(int i=1;i<=m;i++) if(vis[i]) printf("%d %d %d\n",e[i].frm,e[i].to,e[i].flag);
return ;
}
for(int i=1; i<=m; i++) if(e[i].flag==0)e[i].val-=mid;
}
printf("no solution\n");
}
void work()
{
srand(time(0));
init();
solve();
}
}
int main()
{
zzc::work();
return 0;
}
相關文章
- [dp 小計] wqs 二分
- BZOJ 3624 [Apio2008]免費道路:並查集 + 生成樹 + 貪心【恰有k條特殊路徑】API並查集
- wqs二分學習筆記筆記
- DP最佳化——wqs二分
- WQS 二分 & 凸最佳化dp
- 企業免費建站-免費響應式網站-免費釋出資訊網站
- 為什麼免費代理是“免費”的?
- 免費模式與免費音樂服務 Spotify模式
- 免費的FTP工具,免費的FTP工具下載!FTP
- 開源是免費的,維護也是免費的
- 資料免費
- 開源=免費?
- 可免費使用的免費API分享API
- 免費gm許可權手遊 永久免費gm手遊平臺
- 免費才最貴:揭露「免費」Windows 10 的真實成本Windows
- 阿里免費素材庫阿里
- 免費介面總結
- 免費網上硬碟硬碟
- 個人OJ免費搭建
- SSL 免費證書
- 免費的桌布APIAPI
- 免費 ssl 證書
- 免費領!500份大廠P7面試題免費送!!面試題
- 什麼是免費SSL證書?免費SSL證書能用嗎?
- 本月,八駿推出免費CRM系統,真的是永久免費哦!
- 網路流&費用流&二分圖
- 免費軟體推薦:免費的區域網聊天工具!
- 高仿包代理免費
- 免費https證書HTTP
- 免費資源網站網站
- 免費api介面大全分享API
- nb!免費api大全分享API
- 開源不是免費的
- 免費無線網路
- 免費呼叫微信推送介面
- ZoteroGPT免費使用GPT教程GPT
- 免費雲伺服器伺服器
- Google 免費 AI課程GoAI