hdu1827 Summer Holiday(scc应用)
来源:互联网 发布:有域名了怎么建立网站 编辑:程序博客网 时间:2024/06/05 02:26
因为联系是单向的,且具有传递性,所以一个边强连通分量里面最多只需要通知一个人,那么就取代价最小的那个。然后就缩成DAG图,找入度为0的点就好了。
const int maxn = 1001;int head[maxn], pnt[maxn<<2], nxt[maxn<<2], ecnt;int dfn[maxn], low[maxn], depth;int indeg[maxn];int Min[maxn];int belong[maxn], block;int cost[maxn];bool mark[maxn];stack<int> st;int n, m;void tarjan(int u) { dfn[u] = low[u] = ++depth; st.push(u);mark[u] = true; for (int i = head[u];~i;i = nxt[i]) { int v = pnt[i]; if (dfn[v] == -1) { tarjan(v); low[u] = min(low[u], low[v]); }else if (mark[v]) low[u] = min(low[u], dfn[v]); } if (dfn[u] == low[u]) { block++; Min[block] = INF; while(true) { int x = st.top(); st.pop(); mark[x] = false; Min[block] = min(Min[block], cost[x]); belong[x] = block; if (x == u) break; } }}void addedge(int u,int v) { pnt[ecnt] = v, nxt[ecnt] = head[u], head[u] = ecnt++;}int main(int argc, const char * argv[]){ freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); // clock_t _ = clock(); while(~scanf("%d%d", &n, &m)) { memset(head, -1,sizeof head), ecnt = 0; memset(dfn, -1,sizeof dfn), depth = block = 0; for (int i = 1;i <= n;++i) scanf("%d", &cost[i]); int u, v; while(m--) { scanf("%d%d", &u, &v); addedge(u, v); } for (int i = 1;i <= n;++i) if (dfn[i] == -1) tarjan(i); int MinNum = 0, MinCost = 0; memset(indeg, 0,sizeof indeg); for (int i = 1;i <= n;++i) { for (int j = head[i];~j;j = nxt[j]) { u = i, v = pnt[j]; if (belong[u] != belong[v]) indeg[belong[v]]++; } } for (int i = 1;i <= block;++i) if (indeg[i] == 0) { MinNum++; MinCost += Min[i]; } printf("%d %d\n", MinNum, MinCost); } // printf("\nTime cost: %.2fs\n", 1.0 * (clock() - _) / CLOCKS_PER_SEC); return 0;}
0 0
- hdu1827 Summer Holiday(scc应用)
- hdu1827 Summer Holiday (Tarjan)
- HDU1827 Summer Holiday
- HDU1827 Summer Holiday
- hdu1827——Summer Holiday
- HDU1827:Summer Holiday【强连通】
- hdu1827 Summer Holiday(tarjan+ 缩点)
- 【HDU1827】Summer Holiday(Tarjan缩点)
- hdu1827 Summer Holiday【强连通+贪心】
- HDU1827:Summer Holiday(缩点 & 贪心)
- hdu1827 Summer Holiday(强连通,缩点建图)
- hdoj-1827-Summer Holiday(scc+缩点)
- HDU1827 Summer Holiday(强连通缩点建图)
- HDU1827 Summer Holiday 强连通 Tarjan 缩点 统计
- [HDU1827]Summer Holiday(Tarjan缩点+强连通分量)
- hdu1827 Summer Holiday(Tarjan缩点+贪心)
- HDU1827 Summer Holiday(强连通+缩点+最小传递费用)
- HDU1827 Summer Holiday 解题报告【tarjan/强连通分量+缩点】
- Android异常--Parcelable encountered IOException writing serializable object
- <mvc:annotation-driven />与<context:annotation-config />
- bean的加载(五)获取单例
- iOS开发中@property的属性weak nonatomic strong readonly等介绍
- 为何创建线程推荐_beginthreadex()函数而非CreateThread()?
- hdu1827 Summer Holiday(scc应用)
- jQuery实现Div控件拖动效果
- orcal 导入导出数据库
- 微信登录和微信充值
- pthread
- 数据挖掘学习笔记-数据篇
- 利用自定义xml属性指定来RecyclerView的LayoutManager
- 使用javax.mail 发送邮件 带附件
- linux系统v4l2简单编程-抓帧