题目链接

  • 题意:

    给定n个点,每一个点有一个权值的有向图。如今须要选定一些点,使得这些点权值和最小。且满足:假设i能到达j且j能到达i,那么i、j能够仅仅选一个
  • 分析:

    强联通模板题

//使用时仅仅更新G完毕构图
//scc_cnt从1開始计数 //pre[]表示点在DFS树中的先序时间戳
//lowlink[]表示当前点和后代能追溯到的最早祖先的pre值
//sccno[]表示点所在的双连通分量编号
//vector<int> G保存每一个点相邻的下一个点序号
//stack<Edge> S是算法用到的栈
const int MAXV = 310000; vector<int> G[MAXV];
int pre[MAXV], lowlink[MAXV], sccno[MAXV], dfs_clock, scc_cnt;
stack<int> S; void init(int n)
{
REP(i, n) G[i].clear();
} void dfs(int u)
{
pre[u] = lowlink[u] = ++dfs_clock;
S.push(u);
for(int i = 0; i < G[u].size(); i++)
{
int v = G[u][i];
if(!pre[v])
{
dfs(v);
lowlink[u] = min(lowlink[u], lowlink[v]);
}
else if(!sccno[v])
{
lowlink[u] = min(lowlink[u], pre[v]);
}
}
if(lowlink[u] == pre[u])
{
scc_cnt++;
for(;;)
{
int x = S.top();
S.pop();
sccno[x] = scc_cnt;
if(x == u) break;
}
}
} void find_scc(int n)
{
dfs_clock = scc_cnt = 0;
memset(sccno, 0, sizeof(sccno));
memset(pre, 0, sizeof(pre));
for(int i = 0; i < n; i++)
if(!pre[i]) dfs(i);
}; int cost[MAXV];
vector<int> vt[MAXV];
int Min[MAXV]; int main()
{
// freopen("in.txt", "r", stdin);
int n, e, a, b;
while (~RI(n))
{
init(n);
REP(i, MAXV) vt[i].clear();
CLR(Min, INF); REP(i, n) RI(cost[i]);
RI(e);
REP(i, e)
{
RII(a, b); a--; b--;
G[a].push_back(b);
}
find_scc(n); REP(i, n)
{
int no = sccno[i];
vt[no].push_back(i);
Min[no] = min(Min[no], cost[i]);
}
LL v = 0, ans = 1;
REP(i, MAXV)
{
if (vt[i].size() > 0)
{
int cnt = 0;
REP(j, vt[i].size())
{
if (cost[vt[i][j]] == Min[i]) cnt++;
}
ans *= cnt;
ans %= MOD;
v += Min[i];
}
}
cout << v << ' ' << ans << endl;
}
return 0;
}

最新文章

  1. ue4标签测试与总结(UPROPERTY)
  2. Oracle round函数是什么意思?怎么运用?
  3. haproxy simple cfg
  4. HDU----(4549)M斐波那契数列(小费马引理+快速矩阵幂)
  5. 让Tomcat支持中文文件名
  6. Android百度地图开发(三)范围搜索
  7. WCF寄宿方式
  8. cglib源码分析(三):Class生成策略
  9. SQL Server 本地时间和UTC时间的相互转换的代码
  10. php7 install script
  11. Hdu 1175 连连看(DFS)
  12. listen函数里面backlog的意义以及各种情况
  13. [Swift]LeetCode482. 密钥格式化 | License Key Formatting
  14. 【github&amp;&amp;git】3、git图像化界面GUI的使用
  15. 让bootstrap-table支持高度百分比
  16. python第四十三课——封装性
  17. Android应用Preference相关及源代码浅析(SharePreferences篇)
  18. qt下的跨目录多工程编译(转)
  19. Qt工程文件Pro介绍(转)
  20. 深入理解JVM类加载机制 classloader

热门文章

  1. RabbitMQ (六) 订阅者模式之路由模式 ( direct )
  2. [PKUSC2018]最大前缀和(DP)
  3. [ZOJ3522]Hide and seek
  4. Problem D: 零起点学算法24——判断奇偶数
  5. 【R笔记】R语言中的字符串处理函数
  6. Orcale自增/Hibernate 配置
  7. Maven设置snapshot无法在远程仓库下载的问题解决
  8. HTML-DEV-ToolLink(常用的在线字符串编解码、代码压缩、美化、JSON格式化、正则表达式、时间转换工具、二维码生成与解码等工具,支持在线搜索和Chrome插件。)
  9. 【java】处理时间字段 在数据库查询的时候只想要年月日,不想要时分秒 ,java中设置时间类型为年月日,java中设置Date中的时分秒为00.00.000
  10. [转载]iOS6新特征:UICollectionView官方使用示例代码研究