标签:pojTest int memset son vis Job include dp
此题可用前向星建图,可优化时间,但我不会。。。
注意:用cin cout会超时。。。
ac代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<vector> 5 #include<cmath> 6 #define ll long long 7 #define inf 0x3f3f3f3f 8 using namespace std; 9 const int N = 100000 + 10; 10 11 vector<int>vec[N]; 12 int prof[N], vis[N], in[N]; 13 int maxn = -inf; 14 int dp[N]; 15 16 int dfs(int u) { 17 18 vis[u] = 1; 19 int len = vec[u].size(); 20 if (len == 0) { 21 return prof[u]; 22 } 23 for (int i = 0; i < len; i++) { 24 int son = vec[u][i]; 25 if (!vis[son]) { 26 dp[son] = dfs(vec[u][i]); 27 } 28 dp[u] = max(dp[u], dp[son] + prof[u]); 29 } 30 return dp[u]; 31 32 } 33 34 int main() { 35 36 //ios::sync_with_stdio(0); 37 int n, m; 38 while (~scanf("%d %d", &n, &m)) { 39 memset(dp, -0x3f, sizeof(dp)); 40 memset(vis, 0, sizeof(vis)); 41 memset(in, 0, sizeof(in)); 42 for (int i = 1; i <= n; i++) { 43 vec[i].clear(); 44 } 45 maxn = -inf; 46 for (int i = 1; i <= n; i++) { 47 scanf("%d", &prof[i]); 48 } 49 for (int i = 1; i <= m; i++) { 50 int u, v; 51 scanf("%d %d", &u, &v); 52 in[v] = 1; 53 vec[u].push_back(v); 54 } 55 for (int i = 1; i <= n; i++) { 56 if (!in[i]) { 57 maxn = max(maxn, dfs(i)); 58 } 59 } 60 printf("%d\n", maxn); 61 } 62 return 0; 63 }
标签:pojTest,int,memset,son,vis,Job,include,dp 来源: https://www.cnblogs.com/wabi/p/16055088.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。